类的对象键未在构造函数中初始化或分配。为什么引用它会消除错误?

问题描述 投票:0回答:1

如果我有这个:

class A {
    a: string
} 

然后 TypeScript 会告诉我

Property 'a' has no initializer and is not definitely assigned in the constructor.

引用该键可以消除错误:

class A {
    'a': string
} 

游乐场

以我的理解引用和不引用没有区别。那么为什么会这样呢?

typescript class constructor syntax-error object-property
1个回答
0
投票

这种行为是故意的。根据 microsoft/TypeScript#20075,实现了

--strictPropertyInitialization
编译器选项的拉取请求:

严格的属性初始化检查仅适用于使用正确标识符声明的属性。它不适用于具有计算名称的属性或名称指定为字符串或数字文字的属性。

// Compile with --strict  
class Test {
   a: number;  // Error, not initialized
   "hello world": number;  // No check
}

在类型

{a: string}
或值
{a: ""}
中,
a
是一个 标识符,而在类型
{"a": string}
或值
{"a": ""}
中,
"a"
是一个 字符串文字。所以前者会受到检查,而后者则不会。

为什么这样做的目的尚不清楚。在语言中的一些地方,括号访问(如计算属性)或字符串文字被免除检查,作为允许开发人员规避它们的一种方式,但显然不是每个人都同意这样的决定。

© www.soinside.com 2019 - 2024. All rights reserved.