web-dev-qa-db-fra.com

Typescript "Impossible d'assigner à la propriété, car c'est une constante ou en lecture seule" même si la propriété n'est pas marquée en lecture seule

J'ai le code suivant 

type SetupProps = {
    defaults: string;
}

export class Setup extends React.Component<SetupProps, SetupState> {
    constructor(props: any) {
        super(props);
        this.props.defaults = "Whatever";
}

En essayant d'exécuter ce code, le compilateur TS renvoie l'erreur suivante:

Impossible d'affecter aux 'valeurs par défaut' car il s'agit d'une constante ou d'une lecture seule propriété.

Comment deafualts est-il une propriété en lecture seule, alors que ce n'est clairement pas indiqué de cette façon 

6
Hentov

Vous étendez React.Component et définit props comme Readonly<SetupProps>

class Component<P, S> {
    constructor(props: P, context?: any);
    ...
    props: Readonly<{ children?: ReactNode }> & Readonly<P>;
    state: Readonly<S>;
    ...
}

La source

Si vous souhaitez attribuer des valeurs par défaut, vous pouvez utiliser quelque chose comme:

constructor({ defaults = 'Whatever' }: Partial<SetupProps>) {
    super({defaults});
}
1
Aleksey L.