TypeScript問題集にTypeScript4.1で追加されたTemplate Literal Typesを追加しました
問86
TypeScript(4.1)未満ではこちら
const date = (year: number, month: number, date: nubmer) => {
return `${year}-${month}-${date}`;
};
const result = date(2020, 10, 10) // string
のように2020-10-10
にもかかわらずstring
として推論されてしまっていた
Template Literal Types
を使ってresult
の型が 2020-10-10
になるようにしてください。
const date = <Y extends number, M extends number, D extends number>(year: Y, month: M, date: D) => {
return `${year}-${month}-${date}` as `${Y}-${M}-${D}`;
};
const result = date(2020, 10, 10) // "2020-10-10"
問87
String Literal "foo"
を型引数として渡すと文字の先頭を大文字にする型("Foo"
型)が返ってくるGetterName<T>
を定義してください
type GetterName<T extends string> = `${capitalize T}`;
type GotNameWithCapitalize = GetterName<'foo'>; // 'Foo'
TypeScript問題集はこちら