javascript - 如何在 TypeScript 中链接函数参数类型?

标签 javascript typescript types

我有一个对象,其值类型为stringnumber:

interface Person {
  name: string;
  age: number;
}

我有一个函数可以更改对象,其中一个参数作为字段索引,另一个作为字段值:

const person = {name: "Fred", age: "30"};

const changePerson = (index: keyof Person, value: string | number): void => {
  person[index] = value;
}

问题在于,正如 TypeScript 所见,index 可以是“名称”,value 可以是数字,但这种情况永远不会发生。我不确定如何链接 indexvalue 来告诉 TypeScript 这些类型以特定方式链接。

有人可以帮忙吗?

我能够通过使用 case 语句来消除错误,但它不会像 TypeScript 通常那样被转译出来:

const changePerson = (index: keyof Person, value: string | number): void => {
  switch(index) {
    case "name":
      person[index] = value as string;
      break;

    default:
      person[index] = value as number;
  }
}

最佳答案

你可以用泛型来做到这一点: <T extends keyof Person>(index: T, value: Person[T]): void

这基本上告诉类型系统第二个参数必须是第一个参数指向的类型。

Typescript playground 上的完整示例

关于javascript - 如何在 TypeScript 中链接函数参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58550033/

相关文章:

java - 字节值的平均值

Flash ActionScript 3.0 : Number Type and Decimal Precision (Vector Fields and Particles)

javascript - Safari 在切换 css 文件后忽略 css dir ="ltr"

javascript - HighSlide 关闭

angular - Angular2 稳定版中的 md-input 绑定(bind)错误

javascript - 类型 'void' 没有属性 'blob' 并且没有字符串索引签名

memory-management - 除了非文字进入堆之外,文字和非文字之间有什么区别?

javascript - 如何将选定复选框的值发送到 app.get 路由

javascript - 如何使用 JavaScript 操作 HTML 元素

javascript - 无法访问在 Angular 的另一种方法中以一种方法实例化的成员