
1 、interface
interface TypeD{ subTypeA: string; subTypeB: number; } interface TypeProp{ typeA: string; typeB: number; typeC: boolean; typeD: TypeD; } 2 、data
const data1: TypeProp = { typeA: 'yes', typeB: 1, typeC: true, typeD: { subTypeA: 'no', subTypeB: 0, } } 3 、function
const dosomething = (data: keyof TypeProp):[?] => { return data1[data] } 请问 [?] 处我需要怎么处理(或者我需要如何定义 dosomething),才能表示返回的是 data1[data]的类型
我想要的
const b = dosomething('typeB') // b 是 number 类型 const c = dosomething('typeC') // c 是 boolean 类型 const d = dosomething('typeD') // d 是 TypeD 类型 1 lzgshsj 2024 年 1 月 19 日 const dosomething = <T extends keyof TypeProp>(data: T): TypeProp[T] => { return data1[data]; } |
2 Gaoti 2024 年 1 月 19 日 ```typescript function dosomething<K extends keyof TypeProp>(data: K): TypeProp[K] { return data1[data]; } ``` 善用泛型 |
4 yxcoder OP |
5 yxcoder OP @yxcoder const dosomething = (data: keyof TypeProp | (keyof TypeProp)[]) => { ... } |
6 MinonHeart 2024 年 1 月 19 日 可能类似这样吧,假设都返回对象形式 get(keys: keyof T): Pick<T, keyof T>; get<U extends keyof T, K extends U[]>(keys: K): Pick<T, K[number]>; |
7 Gaoti 2024 年 1 月 19 日 @yxcoder #5 ``` typescript function dosomething<K extends keyof TypeProp>(data: K): TypeProp[K]; function dosomething<K extends keyof TypeProp>( data: K[], ): { [P in K]: TypeProp[P] }[]; function dosomething<K extends keyof TypeProp>( data: K | K[], ): TypeProp[K] | TypeProp[K][] { if (Array.isArray(data)) { return data.map((key) => data1[key]); } else { return data1[data]; } } ``` |
8 bgm004 2024 年 1 月 19 日 via Android 类型体操里有这种。 |