如何在TypeScript中使用可选链接?
我想更改对象填充属性的方式 目前我有如何在TypeScript中使用可选链接?,typescript,visual-studio-code,protractor,Typescript,Visual Studio Code,Protractor,我想更改对象填充属性的方式 目前我有 输出接口在浏览器中{ 就业?:失业; 高度重量?:i高度重量; } 出口接口再就业{ 培训?:字符串; activeEmployment?:字符串; 工资?:字符串; } 创建对象的函数如下所示: data.employment.wage // error! // ~~~~~~~~~~~~~~~ <-- Object is possibly undefined. // this ends up setting data.employment
输出接口在浏览器中{
就业?:失业;
高度重量?:i高度重量;
}
出口接口再就业{
培训?:字符串;
activeEmployment?:字符串;
工资?:字符串;
}
创建对象的函数如下所示:
data.employment.wage // error!
// ~~~~~~~~~~~~~~~ <-- Object is possibly undefined.
// this ends up setting data.employment to {} but the compiler doesn't realize it
Object.assign(data, { employment: {} });
data.employment.wage // error! but we know it *is* defined
// ~~~~~~~~~~~~~~~ <-- Object is possibly undefined.
data.employment.wage // no error now
专用数据生成器(新客户:INewCustomer):INewOffer{
常量数据:INewOffer={};
if(NullCheck.isDefinedOrNonNull(newCustomer.age)){
数据:就业={
培训:新客户培训,
activeEmployment:newCustomer.activeEmployment,
工资:newCustomer.wage,
};
}否则{
数据:就业={
工资:newCustomer.wage,
};
}
data.heightWeight={
高度:'180',
重量:'75',
};
返回数据;
}
我已尝试将代码更改为
专用数据生成器(新客户:INewCustomer):INewOffer{
常量数据:INewOffer={};
if(NullCheck.isDefinedOrNonNull(newCustomer.age)){
data.employment.trainings=newCustomer.trainings;
data.employment.activeEmployment=newCustomer.activeEmployment;
data.employment.wage=newCustomer.wage
}否则{
data.employment.wage=newCustomer.wage
}
data.heightWeight.height='180';
data.heightWeight.weight='75';
返回数据;
}
VS代码IDE没有发现任何问题,例如:当我将鼠标悬停在
上面写着data.
const data:INewOffer
=>就业。
员工的(财产)就业?:离职
=>工资
(属性)就业。工资?:字符串
E/launcher-错误:TypeError:无法设置未定义的属性“wage”
我尝试将其设置为:
data.employment!。工资=新客户。工资
但它不起作用。然后我发现typescript中不支持可选链接
我的问题是,为什么IDE不说这是一个错误?或者我必须做些别的事情才能让它工作?您应该确保启用,a。假设你的项目中有一个文件;您应该在那里指定它。事实上,我建议使用
--strict
,其中包括--strictNullChecks
以及其他有用的东西。希望它能开始警告您以下错误:
data.employment.wage // error!
// ~~~~~~~~~~~~~~~ <-- Object is possibly undefined.
// this ends up setting data.employment to {} but the compiler doesn't realize it
Object.assign(data, { employment: {} });
data.employment.wage // error! but we know it *is* defined
// ~~~~~~~~~~~~~~~ <-- Object is possibly undefined.
data.employment.wage // no error now
它将抑制--stricnullchecks
启用的错误,但在运行时由于您对编译器撒谎而爆炸。该断言适用于以下情况:
data.employment.wage // error!
// ~~~~~~~~~~~~~~~ <-- Object is possibly undefined.
// this ends up setting data.employment to {} but the compiler doesn't realize it
Object.assign(data, { employment: {} });
data.employment.wage // error! but we know it *is* defined
// ~~~~~~~~~~~~~~~ <-- Object is possibly undefined.
data.employment.wage // no error now
TypeScript确实试图为提议的JavaScript功能提供实现,并且最终可能会支持in-JavaScript,但目前的提议只是在,TypeScript维护者的一般策略是,一旦达到第3阶段,就只实现语言添加。因此,从TS3.4开始,TypeScript不支持可选链接
好的,希望能有帮助。祝你好运 最后,typescript支持可选链接-
因此,您可以将typescript版本更新为3.7或更高版本,并更新vscode版本以使其正常工作。非常感谢您的澄清,这正是我想要的。我可以在我的tsconfig文件中添加以下内容:
“strict”:true,
,但也有“strictNullChecks”:false,
请参见v1.41