![](/img/trans.png)
[英]TypeScript Generics: infer key of key-value return type from function argument
[英]TypeScript — How to infer key-value type based on dynamic key
假设我有一个 state object,其接口如下:
interface IState {
car_brand: string;
year: number;
+ many other properties with various types
}
我想生产一个减速器 function 来改变这个 state 中的值。 我很想拥有一个名为set_value
的action
,它可以处理更改 state 中的任何值。 然后我会像这样输入那个动作:
enum ACTION_TYPE {
set_value = ‘set_value’,
}
type IAction =
{
type: ACTION_TYPE.set_value;
payload: { ??? };
};
现在我的问题是如何键入payload
,以便它可以处理来自 IState 的任何键,然后正确推断出所需的值类型? 在伪代码中,我会寻找这样的东西:
payload: { `a key from IState`: `a value whose type matches the particular key chosen from IState` }
如何在 TypeScript 中正确写入有效载荷类型?
我会使用 Typescript 实用程序类型Partial
像这样:
type IAction =
{
type: ACTION_TYPE.set_value;
payload: Partial<IState>
};
这意味着payload
具有相同类型的IState
,但所有属性都转换为可选。
这样就可以工作,并正确地将year
的类型限制为number
:
interface IState
{
car_brand: string;
year: number;
}
{
type: ACTION_TYPE.set_value,
payload: {
year: 1997 // Would produce an error if you changed it to a string
}
}
但这会导致错误,因为您的 state 类型上不存在foo
:
interface IState
{
car_brand: string;
year: number;
}
{
type: ACTION_TYPE.set_value,
payload: {
foo: "baz"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.