繁体   English   中英

TypeScript — 如何根据动态键推断键值类型

[英]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_valueaction ,它可以处理更改 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM