TypeScript newable 和枚举参考
Posted
技术标签:
【中文标题】TypeScript newable 和枚举参考【英文标题】:TypeScript newable and enum reference 【发布时间】:2018-03-23 08:59:47 【问题描述】:我正在使用一个用 javascript 编写的外部 SDK。其中一个模块Blob
是新的,但也公开了一个枚举FooEnum
(成员Bar
和Baz
)。
在 JavaScript 中使用这个 SDK 的代码是这样的:
const blobInstance = new Sdk.Blob();
const fooType = Sdk.Blob.FooEnum.Baz;
我现在正在尝试编写一个可以将此 SDK 转换为的接口,以便为我提供一些类型安全性。这是我到目前为止所得到的:
interface BlobInterface
enum Foo
Bar,
Baz
interface Sdk
Blob:
new(): BlobInterface;
FooEnum: Foo;
然而,我的问题是,当我引用Blob.FooEnum
时,它认为FooEnum
本身实际上是枚举Foo
的成员(即它认为它是Bar
或Baz
)并且,因此,不让我从中得到Baz
。
我如何告诉 TypeScript Blob.FooEnum
实际上指向枚举本身并且不是枚举的成员?
【问题讨论】:
【参考方案1】:Foo
既是值名称又是类型名称。作为一个值,它表示其属性具有键 Bar
和 Baz
并且其值分别为 0
和 1
的对象(它还具有键为 0
和 1
的属性,其值为 @ 987654328@ 和 "Baz"
,分别。)。作为一个类型,它代表Foo.Bar
和Foo.Baz
类型的联合。它们不一样:值Foo
不是Foo
类型。
这就像在一个类中(例如,class Bar
),其中值Bar
表示类构造函数,而类型Bar
表示类实例的类型。同样,值Bar
不是Bar
类型。
在这两种情况下,如果您想要与名称为 Foo
或 Bar
的值对应的类型,则使用带有值的 typeof
:
interface Sdk
Blob:
FooEnum: typeof Foo;
现在FooEnum
与对象Foo
具有相同的类型,它应该适合你。
祝你好运!
【讨论】:
以上是关于TypeScript newable 和枚举参考的主要内容,如果未能解决你的问题,请参考以下文章