角色属性装饰者投掷"属性' x'没有初始化程序......"最新VSCode中的错误

时间:2018-02-15 19:54:01

标签: angular typescript visual-studio-code

我将引用Angular指南here并使用此示例代码。

自从我上次更新我的Visual Studio代码以来,我开始在我的组件中使用Angular装饰器(例如.ts)修饰的属性下的Angular组件@Input文件中获得红色下划线。在下面的示例代码中,我会在@Input() hero: Hero;@Input('master') masterName: string;下面看到一个红色下划线:

import { Component, Input } from '@angular/core';

import { Hero } from './hero';

@Component({
  selector: 'app-hero-child',
  template: `
    <h3>{{hero.name}} says:</h3>
    <p>I, {{hero.name}}, am at your service, {{masterName}}.</p>
  `
})
export class HeroChildComponent {
  @Input() hero: Hero;
  @Input('master') masterName: string;
}

以下是红色下划线的错误消息:

  

[ts]属性&#39; masterName&#39;没有初始值设定项,并且在构造函数中没有明确赋值。

我不知道为什么这些突然出现,我希望他们离开。我喜欢做的是初始化为一些一次性值,这对于string可能没问题,但对于像Hero这样的类我绝对不希望有这样做。

提前致谢!

2 个答案:

答案 0 :(得分:25)

检查您的tsconfig.json文件并确保strictPropertyInitialization为false。

有关详细信息,请参阅本文档的“严格类初始化”部分:http://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html

注意:如果你有

"strict": true,

在你的tsconfig.json文件中设置,它现在会自动设置这个新的strict属性,并让你看到所有这些通知。

所以你可以把它改成:

"strict": true,
"strictPropertyInitialization": false,

答案 1 :(得分:0)

解决方案1:

创建一个初始化器

name: string;
constructor() {
    this.name = '';
}

解决方案2:

将该属性设为可选

name?: string;
or
name: string|undefined;

解决方案3:

@DeborahK的解决方案。 在tsconfig.json中完成

"strict": true,
"strictPropertyInitialization": false,