Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在TypeScript中使用可选链接?_Typescript_Visual Studio Code_Protractor - Fatal编程技术网

如何在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