0

我有一个接口“示例”,我想创建一个函数来获取键(示例中的属性名称)和该键的新值。但我不明白如何为此编写类型,现在我编写代码,但这不起作用。

interface Example {
  num: number;
  str: string;
}

const obj: Example = {
  num: 5,
  str: '123'
}

const setExampleProp = ({key, value}: {
  key: keyof Example;
  value: Example[keyof Example];
}) => {
  obj[key] = value
}

错误:键入“字符串 | number' 不可分配给类型 'never'。类型“字符串”不可分配给类型“从不”。

4

2 回答 2

1

将其更改为通用函数

function setExampleProp<T extends keyof Example>({key, value}: {
  key: T;
  value: Example[T];
}) {
  obj[key] = value
}
于 2020-09-23T20:12:10.383 回答
1

上面的答案是有效的。

另一种方法是向您的界面添加索引签名:

interface Example {
  num: number;
  str: string;

  [name: string]: Example[keyof Example];
}
于 2020-09-23T20:14:04.270 回答