相关疑难解决方法(0)

Typescript:来自枚举的字符串文字联合类型

我想从枚举中得到一个字符串文字联合.

对于这个枚举......

enum Weekday {
    MONDAY = 'mon',
    TUESDAY = 'tue',
    WEDNESDAY = 'wed'
}
Run Code Online (Sandbox Code Playgroud)

......我想得到这个:

type WeekdayType = 'mon' | 'tue' | 'wed';
Run Code Online (Sandbox Code Playgroud)

我试过typeof keyof Weekday但结果却是'MONDAY' | 'TUESDAY' | 'WEDNESDAY'.感觉解决方案可能与映射类型有关,但我似乎无法绕过它.

我该怎么做呢?

enums typescript

15
推荐指数
3
解决办法
2495
查看次数

打字稿:对象和原语之间的 keyof typeof union 永远不会

首先,我的问题的一些上下文:我有一个项目,我通过 Socket.IO 接收一个对象,因此我没有关于它的类型信息。此外,它是一种相当复杂的类型,因此需要进行大量检查以确保接收到的数据良好。

问题是我需要访问由接收对象中的字符串指定的本地对象的属性。这适用于第一维,因为我可以将 any 类型的属性说明符转换keyof typeof为我想要访问的任何内容(例如this.property[<keyof typeof this.property> data.property])。

结果变量的类型显然是一个相当冗长的联合类型(联合所有属性的所有类型this.property)。只要这些属性之一是非原始类型,keyof typeof subproperty就被推断为never.

通过之前所做的检查,我可以保证该属性存在,并且我 99% 地确定代码在编译后会运行。抱怨的只是编译器。

下面是一些非常简单的代码,可重现此行为以及观察到的和预期的类型。

const str = 'hi';
const obj = {};
const complexObj = {
    name: 'complexObject',
    innerObj: {
        name: 'InnerObject',
    },
};

let strUnion: typeof str | string;              // type: string
let objUnion: typeof obj | string;              // type: string | {}
let complexUnion: typeof complexObj | string;   // type: string | { ... as …
Run Code Online (Sandbox Code Playgroud)

types type-inference type-conversion typescript

4
推荐指数
1
解决办法
3441
查看次数