类型 'string' 不可分配给类型 '"string" | "string"' 尝试调用对象字面量
Type 'string' is not assignable to type '"string" | "string"' trying to call object literal
好吧,我正在尝试根据 let 地形(字符串)执行动态方法,您将在位于此 post 底部的代码中看到,因此我可以创建新的地形,只需添加他们在 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,
}
对象字面量中的值是每个地形的class,例如class Plains extends Terrain,它们有一个创建方法。
问题是当我尝试 select 并创建特定地形时。这是代码:
let newPosition = "12";
let terrain = "Plains";
let sel : (keyof TERR_CREATE) = terrain;
TERRAINS_CREATE[sel].create(newPosition);
当我 运行 该代码时,我收到此错误:类型 'string' 不可分配给类型 '"Plains" | "Mountains"'.
我能做什么?
该代码无法为我编译(您通常应该 post 一个 Minimal, Complete, and Verifiable example 以获得最好的帮助)。 编辑:感谢更新你的代码。
我会说你的问题是 terrain
扩大到 string
因为你正在使用 let
来声明它。由于通过 let
声明的变量可以更改它们的值,通常你不会说 let terrain = "Plains"
除非你打算稍后 更改 terrain
的值。所以编译器推断 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" 的类型为keyof TERR_CREATE。
或者声明为常量。
好吧,我正在尝试根据 let 地形(字符串)执行动态方法,您将在位于此 post 底部的代码中看到,因此我可以创建新的地形,只需添加他们在 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,
}
对象字面量中的值是每个地形的class,例如class Plains extends Terrain,它们有一个创建方法。
问题是当我尝试 select 并创建特定地形时。这是代码:
let newPosition = "12";
let terrain = "Plains";
let sel : (keyof TERR_CREATE) = terrain;
TERRAINS_CREATE[sel].create(newPosition);
当我 运行 该代码时,我收到此错误:类型 'string' 不可分配给类型 '"Plains" | "Mountains"'.
我能做什么?
该代码无法为我编译(您通常应该 post 一个 Minimal, Complete, and Verifiable example 以获得最好的帮助)。 编辑:感谢更新你的代码。
我会说你的问题是 terrain
扩大到 string
因为你正在使用 let
来声明它。由于通过 let
声明的变量可以更改它们的值,通常你不会说 let terrain = "Plains"
除非你打算稍后 更改 terrain
的值。所以编译器推断 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" 的类型为keyof TERR_CREATE。
或者声明为常量。