【发布时间】:2018-06-09 15:28:47
【问题描述】:
我有一个这样定义的类型:
export type Thing = "thinga" | "thingb"
有没有一种方法可以判断我拥有的任意字符串值是否属于该联合?
let value1 = "thinga";
let value2 = "otherthing";
console.log("value1: " + value1 <is in> Thing );
console.log("value2: " + value2 <is in> Thing );
我希望 value1 为 true,而 value2 为 false。 实际用例是有一个字符串数组,如果它们不在定义中(可能是日志),我想过滤掉它们,然后转换为正确的类型。
问题在于 Thing 类型是生成的代码,它与我的代码一起编译并且值可以更改 - 所以我不想在硬编码到值的类型保护中编写条件逻辑。我不控制生成代码的东西 - 否则我猜在这种情况下,如果类型是字符串枚举,我想做的事情会很容易。
我希望我可以编写某种使用keyof 或类似内容的类型保护?但我看不出如何使它工作。
Typescript 版本是 2.8.1,不过升级不是什么大问题。
我知道这个问题:https://stackoverflow.com/a/50085718/924597,但我不认为这是重复的,因为我无法使用该问题的答案。
【问题讨论】:
-
你可以在接口上定义键,然后使用
keyof interfacename作为类型保护,如果你知道键
标签: typescript