ERROR in ... component.ts(..,..):类型中的计算属性名称 文字必须直接引用内置符号。 ...: 找不到 姓名'任何'。
我期待一个包含其他字符串的字符串的对象,即:
{ abc: 'xyz' }
我做了什么:
foo: { [string]: string };
答案 0 :(得分:8)
需要计算值的识别名称:
foo: { [bar: string]: string };
答案 1 :(得分:3)
如果密钥类型来自泛型,则 much more configurable 答案将不起作用。为此,您需要使用 in
运算符:
type WithKey<K extends string | number | symbol> = {
[k in K]: boolean
}
答案 2 :(得分:1)
构建后,我遇到了类似的问题。我面临的两个问题是使用数字和或枚举值作为对象中的键。只是为了帮助那些将来会看到这种情况的人。
d
这会将export enum MyEnum {
one = 'stringOne',
two = 'stringTwo',
}
export const someMap = {
[ MyEnum.one ]: 'valueOne',
[ MyEnum.two ]: 'valueTwo',
};
转换为类似于...的类型
someMap
请注意,键仍然是枚举值,而不是字符串,打字稿/角度不喜欢这样做,因为它期望的是...
export declare const someMap: {
[ MyEnum.one ]: string;
[ MyEnum.two ]: string;
};
所以有两个可能的解决方法...
export declare const someMap: {
[ x: string ]: string;
};
someMap
export interface ForceStringType {
[product: string]: string;
}
export const someMap: ForceStringType = {
[ MyEnum.one ]: 'valueOne',
[ MyEnum.two ]: 'valueTwo',
};
类型分配给string
的键someMap
export const someMap: ForceStringType = {
[ MyEnum.one as string ]: 'valueOne',
[ MyEnum.two as string ]: 'valueTwo',
};
这会将const CONSTANT_ONE = 123;
const CONSTANT_TWO = 321;
export const someMap = {
[ CONSTANT_ONE ]: 'valueOne',
[ CONSTANT_TWO ]: 'valueTwo',
};
转换为类似于...的类型
someMap
请注意,键仍然是常数/数字值,而不是字符串,打字稿/角度再次期望类似于...
export declare const someMap: {
[ CONSTANT_ONE ]: string;
[ CONSTANT_TWO ]: string;
};
所以一种可能的解决方法是...
export declare const someMap: {
[ x: string ]: string;
};
的每个键插入为字符串someMap
注意:使用常量/数字作为键来访问
export declare const someMap: { [ `${CONSTANT_ONE}` ]: string; [ `${CONSTANT_TWO}` ]: string; };
中的值无关紧要,因为打字稿无论如何都会将其强制为字符串,但这可能是实现整体一致性的最佳方法。someMap