簡體   English   中英

Typescript 類型“字符串”上不存在屬性“標簽”

[英]Typescript Property 'label' does not exist on type 'string

我使用以下代碼

    interface State {
        resourceGroup: QuickPickItem | string;

    }

setEvent(state.resourceGroup?.label).catch(err => console.error(err));

為此,我收到以下錯誤


any
Property 'label' does not exist on type 'string | QuickPickItem'.
  Property 'label' does not exist on type 'string'.

https://code.visualstudio.com/api/references/vscode-api#QuickPickItem

知道如何避免這個錯誤嗎? 不使用 ts-ignore 抑制它因為我無法更改QuickPickItem ...

更新

我嘗試在答案中執行建議,但仍然遇到相同的錯誤

在此處輸入圖像描述

在此處輸入圖像描述

在這種情況下,您需要區分您擁有的聯合類型中的兩個可能值。

例如,您可以確保該值不是字符串。 這樣 typescript 將推斷該值是QuickPickItem類型

interface State {     
  resourceGroup: QuickPickItem | string;   
}

let state: State = getState();

if (typeof state.resourceGroup != 'string' && state.resourceGroup?.label){
  setEvent(...)
}

您可以在 typescript 手冊中了解更多信息。
類型保護和區分類型

最簡單的方法是測試變量中是否存在label屬性:

if(state.resourceGroup.label) {
   setEvent(state.resourceGroup.label).catch(err => console.error(err));
}

其他(不安全 - 所以只有當你 100% 確定你在做什么)方法是使用感嘆號手動斷言該屬性的存在:

setEvent(state.resourceGroup.label!).catch(err => console.error(err));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM