Typescript将`interface`键作为字符串的联合

时间:2017-08-10 11:36:09

标签: javascript typescript interface properties

是否可以将函数参数类型检查为interface的键之一:

export interface IUser {
  id: string;
  email: string;
  password: string;
}

const updateUserProperty = (property: 'id' | 'email' | 'password') => e =>
  this.setState({ [property]: e.target.value });

我希望'id' | 'email' | 'password'不被硬编码。

以JS方式,例如。 IUser作为对象,我可以将其转换为Object.keys(IUser).join(' | ')

1 个答案:

答案 0 :(得分:2)

是的,你可以:

export interface IUser {
  id: string;
  email: string;
  password: string;
}

const updateUserProperty = (property: keyof IUser) => e =>
    this.setState({ [property]: e.target.value });

updateUserProperty("sdsd"); //Error
updateUserProperty("id"); //Ok

更多信息here