Vue Prop没有初始化程序,并且在构造函数中未明确分配

Kok*_*oko 1 typescript vue.js tslint visual-studio-code

我在Vue类组件中使用道具。道具是在构造函数中定义的,没有值。这可以编译并正常工作,但是由于最新的VS Code / TSLint更新,我收到以下警告:

属性“标签”没有初始化程序,并且在构造函数中未明确分配。

Vue类组件

export default class Browser extends Vue {
  @Prop({default: '', required:false})
  tag: string

  created(){
     console.log("the tag prop is " + this.tag)
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我确实分配它,则会收到Vue警告,提示您不应在子组件中操纵Prop。

[Vue警告]:避免直接更改prop,因为每当父组件重新渲染时,该值都会被覆盖

由于这似乎主要是棉绒问题,有没有办法禁用它?还是我的代码实际上是错误的?

小智 9

不会需要设置strictPropertyInitialization": false来解决这个问题。

根据Microsoft TypeScript-Vue-Starter存储库中的此链接

通过在vue-property-decorator包中为实例变量添加@Prop()装饰器前缀来定义属性。因为--strictPropertyInitialization选项处于启用状态,所以我们需要告诉TypeScript Vue将通过附加!来初始化我们的属性。给他们。这告诉TypeScript“嘿,放松点,其他人将为这个属性分配一个值。”

您只需要!在prop名称后面添加:

@Prop({default: '', required:false})
  tag!: string
Run Code Online (Sandbox Code Playgroud)


Jer*_*ers 6

我遇到过同样的问题。我通过添加"strictPropertyInitialization": false,到tsconfig.json的CompilerOptions中修复了它。

{
    "compilerOptions": {
        "outDir": "./built/",
        "sourceMap": true,
        "strict": true,
        "noImplicitReturns": true,
        "experimentalDecorators": true,
        "module": "es2015",
        "moduleResolution": "node",
        "target": "es5",
        "strictPropertyInitialization": false,
        "lib": [
            "es5",
            "es2015",
            "dom",
            "ScriptHost"
        ]
    },
    "include": [
        "./src/**/*"
    ]
}
Run Code Online (Sandbox Code Playgroud)