您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

ts 魔法值场景下联合类型能否取代枚举类型?

ts 魔法值场景下联合类型能否取代枚举类型?

遇到这个问题的是代码中存在一个魔法值,然后这个魔法值是 ts 一个 interface 的属性,比如下面这个

export interface People {
  name: string;
  age: number;
}
// ...
let filterKey = "name";

为了解决魔法值,我第一时间是想着去定义一个 const 变量或者枚举类型,比如下面这个

const PEOPLE_FILTER_KEY = "name";
// or
enum PeopleKeys = {
  NAME: "name";
  AGE: "age";
}

但我已经定义好了 People 这个 interface, 没道理还要再写一遍 enum 啊?就没有一种直接自动转换 key 为 enum 的吗?
后面找到 keyof 可以将 interfacekey 自动转换为联合类型,也就是下面这样

type PeopleKeys = keyof People // 等同于 peoples = "name" | "age";

现在就是回到这个问题上,有很多人说 ts 在联合类型上完全能够替代枚举类型,但在魔法值的场景下,可能就是两种不同的情况,比如下面这样

// 枚举
let filterKey = PeopleKeys.NAME;
// 联合类型
let filterKey = "name" as PeopleKeys;

然后你们认为哪一种方式在魔法值场景下更加有效?

typescript 2022/2/18 19:27:56 有507人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶