为什么我对对象字面量的错误ype声明被禁止,请改用类型注释。tslint(no-object-literal-type-assertion)?

时间:2019-05-16 10:47:50

标签: typescript

我在TS中有代码

interface Context {
    out: vscode.OutputChannel,
    myPorts: number[]
}

const outputChannel = vscode.window.createOutputChannel('my-run');

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

我收到错误信息,禁止在对象文字上进行类型断言,请改用类型注释。tslint(no-object-literal-type-assertion

2 个答案:

答案 0 :(得分:1)

This rule禁止使用as注释类型。相反,您应该使用类型注释var: type语法,如:

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

在某些情况下,该语法可能会引发一些错误,然后您可能需要使用any将对象文字转换为as any(实际上是该规则允许的):

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

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

no-object-literal-type-assertion: false

至json的rules字段。

答案 1 :(得分:1)

您可以通过将对象强制转换为unknown来绕过no-object-literal-type-assertion规则,然后再将其分配给其他类型。

示例:

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