TypeScriptまとめ集
目次
1.ユーティリティ型とは?
既存の型を元にした新規型を手軽に生成できる。
2.ユーティリティ型早見表
| 書き方 | 変換結果 | 
|---|---|
| Partial <T> | 任意型に変換 | 
| Readonly <T> | 読み取り専用に変換 | 
| Required <T> | 必須型に変換 | 
| Record <K,T> | 指定の型を持つプロパティ群を生成 | 
| Pick <T,K> | 既存の型から特定のプロパティだけを抽出 | 
| Omit <T,K> | Pickと同じ | 
| Exclude <T,U> | 既存の型から特定の型を除外 | 
| Extract <T,U> | Excludeと同じ | 
| NonNullable <T> | null|undefinedを除外 | 
| Parameters <T> | 関数型の引数を元にタプル型を生成 | 
| ReturnType <T> | 関数型の戻り値型を生成 | 
| ConstructorParameters <T> | コンストラクターの引数型を元にタプル型を生成 | 
| ThisType <T> | 関数の中で使用されるthisの型を指定 | 
| ThisParameterType <T> | 関数型のthis引数の型を抽出 | 
| OmitThisParameter <T> | 関数型のthis引数の型を除外した型 | 
| Uppercase <Stringtype> | 大文字に変換 | 
| Lowercase <Stringtype> | 小文字に変換 | 
| Capitalize <Stringtype> | 1文字目を大文字に変換 | 
| Uncapitalize <Stringtype> | 1文字目を小文字に変換 | 
3.ユーティリティ型サンプルコード
Partial<T>
型Tのプロパティを**任意型(省略可能)**に変換
typescript()
//インターフェイスを定義
interface sample{
  name: string,
  age: number
}
//sampleの全プロパティを任意型(~?)に変換
type sampleOp = Partial<sample>;
//これと同義
interface sampleOp {
  name?: string,
  age?: number
}
Readonly<T>
型Tのプロパティを読み取り専用に変換
typescript(Readonly)
//インターフェイスを定義
interface sample{
  name: string,
  age: number
}
//sampleの全プロパティを読み取り専用に変換
type sampleOp = Readonly<sample>;
//これと同義
interface sampleOp {
  readonly name: string,
  readonly age: number
}
Required<T>
型Tのプロパティを必須プロパティに変換する
typescript(Required)
//インターフェイスを定義
interface sample{
  name: string,
  age: number
}
//sampleの全プロパティを必須プロパティに変換
type sampleOp = Required<sample>;
Record<K,T>
型Kのプロパティ名で、型は型Tのプロパティ群を生成する。
typescript(Record)
//インターフェイスを定義
interface sample{
  name: string,
  age: number
}
//{'AAA':sample, 'BBB':sample}のプロパティを持つ型を生成
type sampleOp = Record<'AAA'|'BBB', sample>;
//これと同義
interface sampleOp {
  AAA: sample
  BBB: sample
}
Pick<T,K> / Omit<T,K>
型Tから型Kを抽出する
typescript(Pick,Omit)
//インターフェイスを定義
interface sample{
  name: string,
  age: number
}
//sampleのnameプロパティだけを抽出
type sampleOp = Pick<sample, 'name'>;
//これと同義
interface sampleOp {
  name: string
}
Exclude<T,U> / Extract<T,U>
型Tから型Uを除外する
typescript(Exclude,Extract)
//インターフェイスを定義
interface sample{
  name: string,
  age: number
}
//sampleのnameプロパティを除外
type sampleOp = Extract<sample, 'name'>;
//これと同義
interface sampleOp {
  age: number
}
NonNullable<T>
型Tからnull | undefinedの方を持つプロパティを除外する
typescript(NonNullable)
//インターフェイスを定義
interface sample{
  name: string,
  nul: null,
  unde: undefined
}
//sampleのnull|undefinedの型を持つプロパティを除外
type sampleOp = NonNullable<sample>;
//これと同義
interface sampleOp {
  name: string,
}
Parameters<T> / ReturnType<T> / ConstructorParameters<T>
- 与えられた関数型の引数を元にタプル型を生成する 。
- ReturnTypeは関数型の戻り値型をタプル型として返す。
- ConstructorParametersはコンストラクターの引数型を元にタプル型として返す。
typescript(Parameters,ReturnType,ConstructorParameters)
//引数付きの関数を定義
function sample(name:string, age:number){ ... }
//sampleの引数を元にタプル型を生成
type sampleOp = Parameters<typeof sample>;
ThisType<T>, ThisParameterType<T>, OmitThisParameter<T>
- ThisTypeは関数の中で使用されるthisの型をTに指定できる。(-noImplicitThisを設定する必要あり)
- ThisParameterTypeは関数型Tのthis引数の型を抽出した型を生成する。(--strictFunctionTypesを設定する必要あり)
- OmitThisParameterは関数型Tのthis引数の型を取り除いた型を生成する。(--strictFunctionTypesを設定する必要あり)
typescript(ThisType,ThisParameterType,OmitThisParameter)
//ThisType
interface A {
  name: string;
}
interface B {
  hello(): void;
}
//thisの型を指定する
const obj: B & ThisType<A> = {
  hello() {
    console.log(`Hello, ${this.name}`);
  },
};
//ThisParameterType
function sample(this: number) {
  return this.toString()
}
type TypeA = ThisParameterType<typeof sample> //number
//OmitThisParameter
function sample(this: number) {
  return this.toString()
}
type TypeA = OmitThisParameter<typeof sample> //string
Uppercase<StringType> / Lowercase<StringType>
TypeScript 4.1で追加。
Uppercaseは全てstring型のプロパティのプロパティ名を大文字にする。
Lowercaseは全てstring型のプロパティのプロパティ名を小文字にする。
typescript(Uppercase,Lowercase)
//Uppercase
//sampleを大文字に変換
type sample = Uppercase<'sample'>;
//これと同義
type sample = 'SAMPLE';
//Lowercase
//sampleを小文字に変換
type sample = Lowercase<'SAMPLE'>;
//これと同義
type sample = 'sample';
Capitalize<StringType> / Uncapitalize<StringType>
TypeScript 4.1で追加。
Capitalizeは全てstring型のプロパティのプロパティ名の1文字目を大文字にする。
Uncapitalizeは全てstring型のプロパティのプロパティ名の1文字目を小文字にする。
typescript(Capitalize,Uncapitalize)
//Capitalize
//sampleの1文字目を大文字に変換
type sample = Capitalize<'sample'>;
//これと同義
type sample = 'Sample';
//Uncapitalize
//sampleの1文字目を小文字に変換
type sample = Uncapitalize<'Sample'>;
//これと同義
type sample = 'sample';