Typescript:接口参数

时间:2017-05-22 16:20:33

标签: typescript

假设我有这样的界面

interface I{
  id: string;
  name: string;
  age: number;
}

和这样的方法

var obj:I={
      id: 'abc',
      name: 'Jim',
      age: 23
};
changeProperty(name:string, value:any){
   obj[name] = value;
}

有没有办法声明name参数type以匹配接口字段?

一种解决方案就是这样的

changeProperty(name: 'id' | 'name' | 'age' , value:any)

但是在一个更大的项目中,一个界面可以有20多个字段,维护它会更加困难。

1 个答案:

答案 0 :(得分:2)

是的,如keyof and lookup types示例中所述:

function changeProperty<N extends keyof I>(name: N, value: I[N]){
   obj[name] = value;
}

changeProperty('id', '123'); // ok
changeProperty('age', 53); // ok
changeProperty('name', 1); // Argument of type '1' is not assignable to parameter of type 'string'