TypeScript
課題01
TypeScriptコンパイラーのインストール
課題01
npm
を使ってTypeScript
コンパイラーのtsc
コマンドをインストールしてください。
課題02
tsconfig.jsonの作成
課題02
tsc
の設定ファイルであるtsconfig.json
をnpx tsc --init
コマンドで作成してください。
課題03
初めてのTSファイル
課題03
console.log('Hello World');
が書かれたsrc/index.ts
ファイルを作成してください。
課題04
初めてのコンパイル
課題04
npx tsc
コマンドでsrc/index.ts
をコンパイルしてください。
課題05
実行する
課題05
node
コマンドでコンパイルされたJS
ファイルを実行してください。
課題06
JSファイルの出力先を変更する
課題06
tsconfig.json
を編集してJS
ファイルの出力先をdist
ディレクトリに変更してください。
課題07
再度コンパイル
課題07
npx tsc
コマンドでもう一度src/index.ts
をコンパイルして、dist/index.js
が生成されることを確認してください。
課題08
プリミティブの型
課題08
以下のコードの変数に型アノテーションを付けてください。
const a: /* ここに定義してください */ = 1; // 数値
const b: /* ここに定義してください */ = true; // ブール
const c: /* ここに定義してください */ = 'hoge'; // 文字列
const d: /* ここに定義してください */ = [1, 2, 3]; // 配列
const e: /* ここに定義してください */ = ['a', 1, true]; // タプル
const f: /* ここに定義してください */ = [[1, 2], [3, 4]]; // 配列の配列
課題09
オブジェクトの型1
課題09
以下の変数obj
に型アノテーションを付けてください。
type Obj = /* ここに定義してください */
const obj: Obj = {a: 1, b: 2, c: 3} // オブジェクト
課題10
オブジェクトの型2
課題10
以下の変数obj
に型アノテーションを付けてください。
type Obj = /* ここに定義してください */
const obj: Obj = {
a: 1,
b: 'hoge',
c: [2, 3, 4],
d: {
e: 5,
f: 'fuga'
}
} // オブジェクト
課題11
オブジェクトの型3
課題11
全てのキーが文字列型でその値が数値型のオブジェクトの型Obj
を定義してください。Record
を使用しないでください。
type Obj = {
// ここに追記してください
};
課題12
オブジェクトの型4
課題12
任意のオブジェクトを意味する型をRecord
を使って定義してください。
type AnyObj = /* ここに定義してください */
課題13
オブジェクトの型5
課題13
全てのキーが文字列型でその値が数値型のオブジェクトの型Obj
をRecord
を使って定義してください。
type Obj = /* ここに定義してください */
課題14
関数の型1
課題14
parseInt
関数の型ParseInt
を定義してください。
type ParseInt = /* ここに型を書いてください */
課題15
関数の型2
課題15
以下の関数の型GetValue
を定義してください。
- 引数1: 全てのキーが文字列型でその値が数値のオブジェクト
- 引数2: オブジェクトのキー
- 戻り値: オブジェクトの値
type GetValue = // ここに型を書いてください
// 使い方
const getValue: GetValue = (obj, key) => obj[key];
課題16
null
課題16
型A
は数値またはnull
です。型A
を定義してください。
type A = /* ここに定義してください */
// 使い方
const a: A = 1;
const b: A = null;
課題17
undefined
課題17
型A
は文字列またはundefined
です。型A
を定義してください。
type A = // ここに定義してください
const a: A = 1;
const b: A = undefined;
課題18
unknown型
課題18
unknown
型の変数a
を検査して、数値であればnumber
にキャストする関数を定義してください。
function isNumber(a: unknown): a is number {
// ここを実装してください。
}
課題19
型のキャスト
課題19
function isHTMLElement<A extends Node>(node: A): node is HTMLElement {
/* ここを定義してください。*/
}
課題20
リテラル型1
課題20
以下の関数getResult
の型を省略せずにリテラル型を使って定義してください。
function getResult(status) {
if (status) return 'Success';
else return 'Failure';
}
課題21
ジェネリクス
課題21
以下の関数を型を省略せずに実装してください。
- 引数: 任意の配列
- 戻り値: 配列の長さ
function length(array) {
}
課題22
インターセクション
課題22
以下の2つの型A
とB
があります。A & B
はどのような型になりますか?
type A = {
a: number,
b: number,
};
type B = {
c: number,
d: number
};
課題23
オブジェクトのキー型
課題23
オブジェクト型のキーの型を抽出してください。
例えば、オブジェクト{a: number, b: number, c: number}
のキーの型を抽出すると'a' | 'b' | 'c'
となります。
type Obj = {a: number, b: number, c: number};
type Keys = /* ここを定義してください */
const a: Keys = 'a';
const b: Keys = 'b';
const c: Keys = 'c';
// エラー
// const d: Keys = 'd';
課題24
オブジェクトの値の型
課題24
オブジェクト型の値の型を抽出してください。
例えば、オブジェクト{a: number, b: string, c: boolean}
の値の型を抽出するとnumber | string | boolean
となります。
type Obj = {a: number, b: number, c: number};
type Values = /* ここを定義してください */
const a: Values = 1;
const b: Values = 'hoge';
const c: Values = true;
// エラー
// const d: Values = [];
課題25
オブジェクトの一部のキーと値
課題25
任意のオブジェクト型Obj
の値の型がstring
型のキーと値を抽出する型を定義してください。
type ExtractString<Obj> = /* ここを定義してください */
例えば、オブジェクト{a: number, b: string, c: boolean}
の場合は、{b: string}
となります。
// 使い方
type NewObj = ExtractString<{
a: number;
b: string;
c: boolean;
}>;
const a: NewObj = {b: 'hoge'};
// エラー
// const a: NewObj = {a: 1, b: 'hoge'};
課題26
オブジェクトの一部の値の型を変更
課題26
任意のオブジェクト型Obj
の値がnumber
型をstring
に変更する型を定義してください。
type NumberToString<Obj> = /* ここを定義してください */
例えば、オブジェクト{a: number, b: string, c: boolean}
の場合は、{a: string, b: string, c: boolean}
となります。
// 使い方
type NewObj = NumberToString<{
a: number;
b: string;
c: boolean;
}>;
const a: NewObj = {a: 'a', b: 'b', c: true};
// 以下はコンパイルエラー
// const a: NewObj = {a: 1, b: 'b', c: true};
課題27
関数の型の抽出
課題27
関数の戻り値の型を抽出する型を定義してください。
type GetReturn<F> = /* ここに書いてください */
// 使用例
type R = GetReturn<(a: number) => string>; // Rはstringになる