繁体   English   中英

为什么我在对象文字上出现错误类型断言被禁止,而是使用类型注释。 tslint(no-object-literal-type-assertion)?

[英]Why I got an error type assertion on object literals is forbidden, use a type annotation instead.tslint(no-object-literal-type-assertion)?

我在 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

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

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

在某些情况下,该语法可能会引发一些错误,然后您可能需要将对象文字转换为any with as 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-assertion规则。

例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM