gpt4 book ai didi

typescript - 指定枚举类型

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:44 24 4
gpt4 key购买 nike

有枚举:

enum Foo {
Bar, // should cause type error
Baz = 'Baz'
}

是否可以为其指定类型以使其成为仅字符串枚举?

最佳答案

如果需要,您可以执行以下操作:

创建一个函数,要求其输入仅具有 string 值的属性:

const enforceStringEnum = <E extends Record<keyof E, string>>(e: E) => {};

然后,根据需要声明Foo:

enum Foo {
Bar,
Baz = 'Baz'
}

并以 Foo 作为输入调用该函数:

enforceStringEnum(Foo); // error!
// Type 'Foo.Bar' is not assignable to type 'string'.

这将为您提供有关 Foo.Bar 的错误消息,您可以返回并修复以消除错误。

是的,您得到的错误不是 Foo 声明的本地错误,但它确实允许您将 Foo 保留为 enum而不是使用其他语言结构。是的,enforceStringEnum() 在运行时有(非常小的)效果。如果你想完全没有运行时工件,这是可能的,但(在我看来)有点丑陋:

type EnforceStringEnum<E extends Record<keyof E, string>> = true;

enum Foo {
Bar,
Baz = 'Baz'
}

declare var fooWitness: EnforceStringEnum<typeof Foo>; // error!
// Type 'Foo.Bar' is not assignable to type 'string'.

但它的工作方式是一样的。

编辑:或者,正如@estus 提到的,您可以使用类型别名而不是变量声明:

type FooWitness = EnforceStringEnum<typeof Foo>; // error!
// Type 'Foo.Bar' is not assignable to type 'string'.

希望对您有所帮助。祝你好运!

关于typescript - 指定枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49046197/

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