TypeScript-如何推断接口泛型参数

TypeScript-如何推断接口泛型参数,typescript,generics,Typescript,Generics,我正在寻找一种解决方案,让接口通过代码时给出的内容推断出通用参数,而不必指定它(因为在我的用例中,不可能指定它) 这是我想做的 接口字段{ 值:T; onChange:(值:T)=>void; } 接口选项{ 字段:{ [key:string]:字段;//需要类型参数。。。 }; } 常量选项:选项={ 字段:{ 姓名:{ 价值:“约翰”, onChange:(value)=>{/*…*/},//值的类型应为字符串 }, 年龄:{ 价值:2, onChange:(value)=>{/*…*/},

我正在寻找一种解决方案,让接口通过代码时给出的内容推断出通用参数,而不必指定它(因为在我的用例中,不可能指定它)

这是我想做的

接口字段{
值:T;
onChange:(值:T)=>void;
}
接口选项{
字段:{
[key:string]:字段;//需要类型参数。。。
};
}
常量选项:选项={
字段:{
姓名:{
价值:“约翰”,
onChange:(value)=>{/*…*/},//值的类型应为字符串
},
年龄:{
价值:2,
onChange:(value)=>{/*…*/},//值的类型应为数字
},
其他:{
价值:{性别:“男性”,货币:1337},
onChange:(value)=>{/*…*/},//值的类型应为{性别:字符串,货币:数字}
},
}
};
在本例中(不起作用),
选项.fields
将是
字段
的集合,其值类型在写入之前是未知的。但是,由于
字段
有一个
参数,因此必须在
选项.字段
中指定该参数才能通过打字。但这种类型可能是任何东西。我希望根据
值的类型推断
onChange
的类型

这似乎适用于函数

函数fn(参数:T){
返回参数;
}
常数测试=fn(2);//试验类型:编号(2)

在本例中,我能够使用一个需要类型参数的函数,而无需指定它,因为它是从我传入的参数推断出来的。我也希望界面有这种行为。

我不确定你能做到这一点。您需要为每个键指定特定的类型,例如,
name:Field,age:Field
,或者如果您想要一个任意数量和任意类型的集合,您必须以某种方式组合所有类型。使用
[key:string]:Field
或将其限制为“仅”所有可能类型的联合
[key:string]:Field
,但两者都不会让您知道具体的泛型。如果您执行
options.fields.[anyKey]
操作,您将得到
any
或作为泛型类型的联合类型,而不是存储在那里的每个泛型。我不确定您是否可以这样做。您需要为每个键指定特定的类型,例如,
name:Field,age:Field
,或者如果您想要一个任意数量和任意类型的集合,您必须以某种方式组合所有类型。使用
[key:string]:Field
或将其限制为“仅”所有可能类型的联合
[key:string]:Field
,但两者都不会让您知道具体的泛型。如果执行
options.fields.[anyKey]
操作,则会得到
any
或作为泛型类型的联合类型,而不是存储在其中的每个泛型。