gpt4 book ai didi

javascript - 在类型 'string' 上找不到参数类型为 'typeof Object' 的索引签名

转载 作者:行者123 更新时间:2023-11-29 22:54:05 24 4
gpt4 key购买 nike

我创建了一个类似枚举的类:https://stackoverflow.com/a/51398471

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) {
};
}

当我使用我定义的 key 访问时,它工作正常,但是当我尝试像这样动态访问时失败了:

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

有没有人帮我看看错误的原因是什么以及解决方法?

请帮忙,谢谢。

我在类中添加了索引签名,但没有帮助

[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) {
};
}

获取枚举类的列表。

最佳答案

问题似乎是使用Object.keys,因为它总是遍历字符串列表和作为对象键的字符串列表。如果您想获取一个对象的所有值,我会改用 Object.values。然而,这将导致问题,因为构造函数也将作为值(原型(prototype))返回,这将导致其他类型问题。

我建议将静态果汁作为一个单独的对象,以便在需要时引用。示例:

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]);

希望对您有所帮助。

关于javascript - 在类型 'string' 上找不到参数类型为 'typeof Object' 的索引签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com