在类型 'typeof Object' 上找不到参数类型为 'string' 的索引签名
No index signature with a parameter of type 'string' was found on type 'typeof Object'
我做了一个 class 枚举如下:
export default class Juice
{
[key: string]: any;
static APPLE = new Juice('APPLE', 'Apple juice');
static ORANGE = new Juice('ORANGE', 'Orange juice');
private constructor(private key:string, public readonly text:string) {
};
}
当我使用我定义的密钥访问时,它工作正常,
但是当我尝试像这样动态访问时它失败了:
console.log(Juice.APPLE); //works fine
console.log(Juice['APPLE']); //works fine
const key = 'APPLE'; //works fine
console.log(Juice[key]); //works fine
console.log(Object.keys(Juice).map((key:string) => Juice[key])); // error!
错误是:
TypeScript error in `path`
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'typeof Juice'.
No index signature with a parameter of type 'string' was found on type 'typeof Juice'. TS7053
有没有人帮我看看错误的原因是什么以及解决方法?
请帮忙,谢谢。
我在 class 中添加了索引签名,但它没有帮助
[key: string]: any;
export default class Juice
{
[key: string]: any;
static APPLE = new Juice('APPLE', 'Apple juice');
static ORANGE = new Juice('ORANGE', 'Orange juice');
private constructor(private key:string, public readonly text:string) {
};
}
获取enum
class的列表。
问题似乎与使用 Object.keys
有关,因为它将始终遍历字符串列表与作为对象键的字符串列表。如果你想获得一个对象的所有值,我会使用 Object.values
。然而,这会导致问题,因为构造函数也将作为值(原型)返回,这将导致其他类型问题。
我建议将您的静态果汁作为一个单独的对象,您可以在需要时引用。
示例:
class Juice {
constructor(private key: string, public readonly text: string) {}
}
const juices = {
APPLE: new Juice('APPLE', 'Apple juice'),
ORANGE: new Juice('ORANGE', 'Orange juice')
};
export default juices;
console.log(Object.values(Juice));
const test: keyof typeof juices = 'APPLE';
console.log(juices[test]);
希望对您有所帮助。
我做了一个 class 枚举如下:
export default class Juice
{
[key: string]: any;
static APPLE = new Juice('APPLE', 'Apple juice');
static ORANGE = new Juice('ORANGE', 'Orange juice');
private constructor(private key:string, public readonly text:string) {
};
}
当我使用我定义的密钥访问时,它工作正常, 但是当我尝试像这样动态访问时它失败了:
console.log(Juice.APPLE); //works fine
console.log(Juice['APPLE']); //works fine
const key = 'APPLE'; //works fine
console.log(Juice[key]); //works fine
console.log(Object.keys(Juice).map((key:string) => Juice[key])); // error!
错误是:
TypeScript error in `path`
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'typeof Juice'.
No index signature with a parameter of type 'string' was found on type 'typeof Juice'. TS7053
有没有人帮我看看错误的原因是什么以及解决方法?
请帮忙,谢谢。
我在 class 中添加了索引签名,但它没有帮助
[key: string]: any;
export default class Juice
{
[key: string]: any;
static APPLE = new Juice('APPLE', 'Apple juice');
static ORANGE = new Juice('ORANGE', 'Orange juice');
private constructor(private key:string, public readonly text:string) {
};
}
获取enum
class的列表。
问题似乎与使用 Object.keys
有关,因为它将始终遍历字符串列表与作为对象键的字符串列表。如果你想获得一个对象的所有值,我会使用 Object.values
。然而,这会导致问题,因为构造函数也将作为值(原型)返回,这将导致其他类型问题。
我建议将您的静态果汁作为一个单独的对象,您可以在需要时引用。 示例:
class Juice {
constructor(private key: string, public readonly text: string) {}
}
const juices = {
APPLE: new Juice('APPLE', 'Apple juice'),
ORANGE: new Juice('ORANGE', 'Orange juice')
};
export default juices;
console.log(Object.values(Juice));
const test: keyof typeof juices = 'APPLE';
console.log(juices[test]);
希望对您有所帮助。