Я пытаюсь использовать вычисляемое имя свойства в функции setState
, где первый аргумент является ключом интерфейса IState
, а второй аргумент является значением интерфейса IState
.И если первый аргумент является определенным ключом, то значение должно быть определенным значением.Я думал использовать перегрузку как это ниже, однако Typescript выдает мне ошибки.У меня сейчас нет доступных ошибок, но выглядит ли это правильно:
enum Qux = {
qux1 = 'qux1',
qux2 = 'qux2'
}
enum Foo = {};
enum Bar = {};
interface IState = {
isLoading: boolean,
foo?: Foo,
bar?: Bar,
qux?: Qux
}
interface IHandleTargetChange {
(input: 'bar', value: Bar): void;
(input: 'qux', value: Qux): void;
}
class MyComponent extends React.Component {
handleTargetChange: IHandleTargetChange = (input: any, value: any) => {
this.setState({
[input]: value
});
}
}
Подсвечивает { [input]: value }
и выдает ошибку:
[ts]
Argument of type '{ [x: number]: any; }' is not assignable to parameter of type 'Pick<IState, "isLoading" | "foo" | "bar" | "qux">'.
Property 'isLoading' is missing in type '{ [x: number]: any; }'. [2345]
(parameter) inputName: any