簡體   English   中英

類型'string'不能分配給類型'“ string” | “ string”'嘗試調用對象文字

[英]Type 'string' is not assignable to type '“string” | “string”' trying to call object literal

好吧,我正在嘗試根據您將在本文底部的代碼中看到的let地形(字符串)做一個動態方法,因此我可以創建新的Terrains,僅將它們添加到TERR_CREATE和TERRAINS_CREATE上。 該代碼是

export class Plains {
    static create(position: string) {
        return 0;
    }
}

export class Mountain {
    static create(position: string) {
        return 0;
    }
}
export interface TERR_CREATE {
     Plains: typeof Plains;
     Mountains: typeof Mountain;
}

export const TERRAINS_CREATE : TERR_CREATE = {
    Plains : Plains,
    Mountains: Mountain,
}

例如,對象文字中的值是每個地形的類(Plains擴展Terrain的類),並且它們具有create方法。

問題是當我嘗試選擇並創建特定地形時。 這是代碼:

let newPosition = "12";
let terrain = "Plains";
let sel : (keyof TERR_CREATE) = terrain;
TERRAINS_CREATE[sel].create(newPosition);

當我運行該代碼時,出現以下錯誤:類型'string'無法分配給類型'“ Plains” | “山””。

我能做什么?

該代碼無法為我編譯(通常應發布一個 Minimal,Complete和Verifiable示例以獲得最佳幫助)。 編輯:感謝您更新代碼。

我想說的是您的問題是terrain擴展為string因為您正在使用let進行聲明。 由於通過let聲明的變量可以更改其值,因此除非您計划稍后更改 terrain的值,否則通常不會說出let terrain = "Plains" 因此,編譯器推斷terrainstring 如果您不喜歡這種推斷,則可以這樣告訴編譯器它是keyof TERR_CREATE

let terrain: keyof TERR_CREATE = "Plains";

在操場上看

然后其余的應該工作。 或者,如果您永遠不想更改terrain的值,則可以使用const聲明,該TypeScript將其推斷為最窄的類型(在這種情況下為字符串文字):

const terrain = "Plains"; // inferred as string literal "Plains"

在操場上看

其余的應該起作用。

希望能有所幫助。 祝好運。

Typescript推斷“ terrain”是字符串,將“ terrain”的類型指定為TERR_CREATE的鍵。

或聲明為const。

暫無
暫無

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

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