型地獄で戦うためのTypeScriptの定石メモ
//Tがstringだったらnumber、それ以外ならbooleanに変換type Test01<T> = T extends string ? number : booleantype Test01A = Test01<string> //numbertype Test01B = Test01<object> //boolean//Tに関係なく、問答無用でnumberに変換(unknownはanyでも可)type Test02<T> = T extends unknown ? number : booleantype Test02A = Test02<string> //numbertype Test02B = Test02<object> //number//変換元interface01interface TestIf01 { a: { a0: number } b: { b0: number }}//特定の部分を取り出すtype Test03<T> = T extends { a: infer R } ? R : nevertype Test03A = Test03<TestIf01> //{a0:number}//キーを削除して値だけ取り出すtype Test04<T> = T extends { [_ in keyof T]: infer R } ? R : nevertype Test04A = Test04<TestIf01> //{a0:number} {b0:number}//共用体型を直交型に変換type Test05<T> = (T extends any ? (_: T) => void : never) extends (_: infer I) => void ? I : nevertype Test05A = Test05<Test04A> //{a0:number} & {b0:number}//変換元interface02interface TestIf02 { 200: { token: string } 500: { err: string }}//構造を整形するtype Test06<T> = T
2021/02/16 10:44