Reactjs 为什么readonly关键字没有';我不能进行分解
我尝试使用react 16.8和typescipt 3.4.5创建带有不可变道具的react组件 在这种情况下,typescript会抛出一个错误Reactjs 为什么readonly关键字没有';我不能进行分解,reactjs,typescript,Reactjs,Typescript,我尝试使用react 16.8和typescipt 3.4.5创建带有不可变道具的react组件 在这种情况下,typescript会抛出一个错误 interface IProps { readonly user: {name: string} } const User = (props: IProps) => { props.user = {name: "Foo"} return <>props.user.name</>; }; 但当我对道具使用
interface IProps {
readonly user: {name: string}
}
const User = (props: IProps) => {
props.user = {name: "Foo"}
return <>props.user.name</>;
};
但当我对道具使用解构时,typescript允许修改道具:
interface IProps {
readonly user: {name: string}
}
const User = ({user}: IProps) => {
user = {name: "Foo"}
return <>user.name</>;
};
接口IProps{
只读用户:{name:string}
}
常量用户=({User}:IProps)=>{
user={name:“Foo”}
返回user.name;
};
我希望typescript在这两种情况下都会抛出错误。欢迎使用堆栈溢出 我不确定typescript,但在ES6中,当您使用常量保护变量时,如下所示:
const x={name:“John”}
此代码将给出一个错误:
x={name:“Mikkel”}
但这不会:
x.name=“mikkel”
它所能保护的只是
x
被覆盖,而不是对象的内部。我怀疑typescript正在执行相同的操作只读
属性可以初始化:
- 在声明的站点(在ES6中镜像
)const
- 在类的构造函数中
const User = (props: IProps) => {
props.user = {name: "Foo"}
return <>props.user.name</>;
};
const User = ({user}: IProps) => {
user = {name: "Foo"}
return <>user.name</>;
};
属性
user
(不在大括号内)与接口无关,因为user
本身没有实现它。接受实现接口的参数的函数本身并不实现此接口。我认为在第二种情况下,您是从props派生变量并将其称为user。您可以编辑它,但它永远不会更改实际的道具对象。
const User = ({user}: IProps) => {
user = {name: "Foo"}
return <>user.name</>;
};