为什么禁止我在对象文字上获得错误类型的断言,而是使用类型注释



我在ts

中具有代码
interface Context {
    out: vscode.OutputChannel,
    myPorts: number[]
}
const outputChannel = vscode.window.createOutputChannel('my-run');
    const ctx = {
        out: OutputChannel,
        myPorts: []
    } as Context;

我在对象文字上有错误类型的断言是禁止的,而是使用类型注释。

此规则禁止使用as在注释类型上使用。相反,您应该使用类型注释var: type语法,如:

    const ctx: Context = {
        out: OutputChannel,
        myPorts: []
    };

在某些情况下,语法可能会丢弃一些错误,然后您可能需要使用as any将对象字面施加到any(实际上是规则允许的(:

    const ctx: Context = {
        out: OutputChannel,
        myPorts: []
    } as any;

现在,我不确定您是否询问如何使您的代码遵守规则(我已经回答了(,或者>为什么警告首先出现。如果是这样,这取决于您的TSLINT配置,如果您的配置不是标准配置,则可能需要提供一些额外的信息。如果是,则必须转到tslint.json文件添加:

no-object-literal-type-assertion: false

到JSON的rules字段。

您可以通过将对象施放到 unknown之前绕过no-object-literal-type-servertion规则,然后将其分配给另一种类型。

示例:

const ctx = {
  out: OutputChannel,
  myPorts: []
} as unknown as Context;

最新更新