はじめに
interfaceに対してジェネリックスを利用する
interface Database<T> { uuid: string data: T[] } const database: Database<string> = { uuid: 'dadfdas34543523425fsadfsafsadfasf', data: ['hoge'] } console.log(database) const database2: Database<number> = { uuid: 'dadfdas34543523425fsadfsafsadfasf', data: [12] } console.log(database2)
- 実行結果
{ uuid: 'dadfdas34543523425fsadfsafsadfasf', data: [ 'hoge' ] } { uuid: 'dadfdas34543523425fsadfsafsadfasf', data: [ 12 ] }
全部オプショナルプロパティ属性になる
interface ChackList { title: string memo: string } type checkList = Partial<ChackList> // 全部Readonly属性になる type checkListRead = Readonly<ChackList> const fetchDate: Promise<string> = new Promise(resolve => { setTimeout(() =>{ resolve('hello') }, 3000) }) fetchDate.then(data =>{ data.toUpperCase() })
Conditional Types
type ConditionalType = 'PHP' extends string ? number : boolean // infer R は型推論する type ConditionalTypeInfer = {skill: string} extends {skill: infer R } ? R : boolean type DistributiveConditionalTypes<T> = T extends 'php' ? number : boolean; let genericsTmp4: DistributiveConditionalTypes<'ruby' | 'php'>