Jam*_*ger 6 javascript enums types typescript typescript-typings
我有一个用JavaScript编写的外部SDK,我正在使用它.其中一个模块Blob是新的,但也暴露了一个枚举FooEnum(成员Bar和Baz).
在JavaScript中使用此SDK的代码如下:
const blobInstance = new Sdk.Blob();
const fooType = Sdk.Blob.FooEnum.Baz;
Run Code Online (Sandbox Code Playgroud)
我现在正在尝试编写一个可以将此SDK转换为接口的接口,以便为我提供一些类型安全性.这是我到目前为止所得到的:
interface BlobInterface { }
enum Foo {
Bar,
Baz
}
interface Sdk {
Blob: {
new(): BlobInterface;
FooEnum: Foo;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,我的问题是,当我引用Blob.FooEnum它时,它认为它FooEnum本身实际上是枚举的成员Foo(即它认为它是Bar或者Baz),因此,不让我从中得到Baz它.
我如何告诉TypeScript Blob.FooEnum实际上指向枚举本身并且不是枚举的成员?
Foo既是值名称又是类型名称。作为值,它表示属性具有键Bar和的对象Baz,其值分别为0和1(它也具有具有键的属性0,1其值分别为"Bar"和"Baz"。)。Foo.Bar作为一种类型,它表示和类型的并集Foo.Baz。它们是不一样的:值Foo不是类型Foo。
这就像在类中(例如,class Bar {}),其中值Bar表示类构造函数,类型Bar表示类实例的类型。同样,该值Bar不是 类型Bar。
Foo在这两种情况下,如果您想要与名称为或 的值相对应的类型,请与值一起Bar使用:typeof
interface Sdk {
Blob: {
FooEnum: typeof Foo;
}
}
Run Code Online (Sandbox Code Playgroud)
现在FooEnum与 object 具有相同的类型Foo,它应该适合您。
祝你好运!
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |