首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Typescript: type‘string’|‘undefined’类型不能赋值给type‘string’。

Typescript: type‘string’|‘undefined’类型不能赋值给type‘string’。
EN

Stack Overflow用户
提问于 2019-02-03 02:51:08
回答 12查看 373.1K关注 0票数 276

当我将接口的任何属性设置为可选时,在将其成员分配给其他变量时会出现如下错误

TS2322:类型为‘string’|‘undefined’类型的字符串不能赋值给类型为‘string’的类型。*类型为‘undefined’的字符串不能赋值给类型为‘string’的类型。

代码语言:javascript
运行
复制
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?

EN

回答 12

Stack Overflow用户

发布于 2019-06-11 17:34:18

为了避免编译错误,我使用了

代码语言:javascript
运行
复制
let name1:string = person.name || '';

然后验证空字符串。

票数 116
EN

Stack Overflow用户

发布于 2019-08-22 22:14:11

我知道这个答案有点晚,但除了yannick的答案之外,还有另一种方式https://stackoverflow.com/a/57062363/6603342使用!是将其转换为字符串,从而告诉TypeScript我确信这是一个字符串,从而将

代码语言:javascript
运行
复制
let name1:string = person.name;//<<

to

代码语言:javascript
运行
复制
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.

票数 94
EN

Stack Overflow用户

发布于 2020-02-22 23:57:19

从TypeScript 3.7开始,您可以使用空合并运算符??.您可以将此功能视为在处理null或undefined时“回退”到缺省值的一种方式

代码语言:javascript
运行
复制
let name1:string = person.name ?? '';

The The The??运算符可以替换||当尝试使用默认值时,可以在处理布尔值、数字等时使用,其中||不能使用。

从TypeScript 4开始,您可以使用??=赋值运算符asa ??= b这是一种替代方案,a = a ?? b;

票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54496398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档