[英]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"
。 因此,編譯器推斷terrain
是string
。 如果您不喜歡這種推斷,則可以這樣告訴編譯器它是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.