TypeScript获得泛型属性



我的代码在这里

type1我可以得到我想要的结果,但是我得到了一个类型检查错误,即使我用@ts-ignore抑制,它仍然弹出错误。类型2是合法的,但不能工作。

我认为可能在T[Field['name']]中,代码'Field['name']'不被认为是一个值?

interface Req{
stringField:string,
dateField:string,
numberField:number
}
type Field<T>={
name: keyof T;
// get T['name'],base on T['name']'s type,return values  
// @ts-ignore 
// type 1
type: T.Field<T>['name'] extends number?'number': 'string'|'date'
// type 2
// type: T[Field<T>['name']] extends number?'number': 'string'|'date'
}
const arr:Field<Req>[]=[
{name:'stringField',type:'string'},
{name:'dateField',type:'date'},
{name:'numberField',type:'number'}
]

我想要抑制错误或法律代码的工作。

下面的类型Field通过将传递的接口中的每个键映射到该键/名称的有效对象类型,然后从映射的类型

创建值/类型的联合,返回所有有效类型的联合游乐场

interface Req{
stringField:string,
dateField:string,
numberField:number
}
type Field<T> = {
[K in keyof T]: {
name: K;
type: T[K] extends number ? 'number' : 'string'|'date'
}
}[keyof T]
const arr: Field<Req>[] = [
{name:'stringField',type:'string'},
{name:'dateField',type:'date'},
{name:'numberField',type: 'number'}
]

最新更新