当我将接口的任何属性设置为可选时,在将其成员分配给其他变量时会出现如下错误
TS2322:类型为‘string’|‘undefined’类型的字符串不能赋值给类型为‘string’的类型。*类型为‘undefined’的字符串不能赋值给类型为‘string’的类型。
interface Person {
name?:string,
age?:string,
gender?:string,
occupation?:string,
}
function getPerson(){
let person = {name:"John"};
return person;
}
let person: Person = getPerson();
let name1:string = person.name;//<<
How do I get around this error?
发布于 2019-06-11 17:34:18
为了避免编译错误,我使用了
let name1:string = person.name || '';
然后验证空字符串。
发布于 2019-08-22 22:14:11
我知道这个答案有点晚,但除了yannick的答案之外,还有另一种方式https://stackoverflow.com/a/57062363/6603342使用!是将其转换为字符串,从而告诉TypeScript我确信这是一个字符串,从而将
let name1:string = person.name;//<<
to
let name1:string = person.name as string;
This will make the error go away but if by any chance this is not a string you will get a run-time error which is one of the reassons we are using TypeScript to ensure that the type matches and avoid such errors at compile time.
发布于 2020-02-22 23:57:19
从TypeScript 3.7开始,您可以使用空合并运算符??
.您可以将此功能视为在处理null或undefined时“回退”到缺省值的一种方式
let name1:string = person.name ?? '';
The The The??
运算符可以替换||
当尝试使用默认值时,可以在处理布尔值、数字等时使用,其中||
不能使用。
从TypeScript 4开始,您可以使用??=
赋值运算符asa ??= b
这是一种替代方案,a = a ?? b;
https://stackoverflow.com/questions/54496398
复制相似问题