TypeScript問題集にTypeScript4.1で追加されたTemplate Literal Typesを追加しました

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"

playground

問87

String Literal "foo" を型引数として渡すと文字の先頭を大文字にする型("Foo"型)が返ってくるGetterName<T>を定義してください

type GetterName<T extends string> = `${capitalize T}`;
type GotNameWithCapitalize = GetterName<'foo'>;  // 'Foo'

playground

TypeScript問題集はこちら