【发布时间】:2018-11-15 20:10:16
【问题描述】:
我正在用 react 和 typescript 编写 Simple LoginForm。
interface State {
username: string;
password: string;
}
class LoginForm extends React.Component<Props, State> {
readonly state: Readonly<State> = {
username: '',
password: ''
}
onChange = (key: keyof State) => (e: React.FormEvent<HTMLInputElement>) => {
const value = e.currentTarget.value;
this.setState({ [key]: value }); // error
}
render() {
return (
...
<TextField
...
onChange={this.onChange('username')}
/>
<TextField
...
onChange={this.onChange('password')}
/>
...
)
}
}
Typescript 在 setState 行中编译失败,出现错误。
类型参数 '{ [x: string]: string; }' 不可分配给“State |”类型的参数((prevState: Readonly, props: Props) => State | Pick'. 类型 '{ [x: string]: string; 中缺少属性 'username' }'。
this.onChange 函数中的“key”参数只允许“用户名”或“密码”,如我所料。这意味着打字稿知道 typeof 'key' 参数必须是 'username' 或 'password'。这很明显,因为我将其定义为 (key: key of State)。
但是为什么在 setState 函数中,typeof 'key' 参数变成了普通字符串呢?
谢谢。
【问题讨论】:
标签: typescript