问题
I made an object using Typescript at Reactjs.
There is a code below.
But it makes this error in UserInformation data from password to lastname.
Could you give me some advice?
Duplicate string index signature
import { observable, action } from 'mobx';
export interface ISignStore {
email: string,
password: string,
firstName: string,
lastName: string,
handleInput(e: any): void,
handleSubmit(e: any): void
}
export class SignStore implements ISignStore {
@observable
UserInformation: {
[email: string]: '',
[password: string]: '',
[firstName: string]: '',
[lastName: string]: ''
};
@action
handleInput = (e: any): void => {
[e.target.id] = e.target.value;
};
@action
handleSubmit = (e: any): void => {
e.preventDefault();
console.log(this.UserInformation);
};
}
回答1:
When you know what the types of a particular object, TypeScript allows you to use interfaces like you have defined with ISignStore
. Following the same pattern for UserInformation
, the type would be:
interface IUserInformation {
email: string;
password: string;
firstName: string;
lastName: string;
}
On the other hand, the syntax you have currently used is called as an Index Signature.
interface IObject {
[k: number]: string
}
This is basically saying that you have an object, but you don't know what keys it would have; But you are sure that the key would be a number and value would be a string. The variable k
here is just a placeholder, you can use anything in that place. So, by the merit of this, there is no usage where there should be a second key for k2: number
. Because k: number
has already covered that case.
This is the error you are getting having defined, email
, password
and firstName
as keys in index signature. They are just duplicate for string
based key.
回答2:
UserInformation: {
[email]: '',
[password]: '',
[firstName]: '',
[lastName]: ''
};
I think you already assign type to those things.
来源:https://stackoverflow.com/questions/55321867/the-error-of-duplicate-string-index-signature-at-reactjs-with-typescript