簡體   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