【发布时间】:2018-08-23 11:00:09
【问题描述】:
假设我在我的应用中定义了这种类型:
type PiiType = 'name' | 'address' | 'email';
我在应用程序周围使用这种类型来强制执行一些强类型。我们可能会从服务端获取表面上代表 PII 的信息,需要通过这个类型定义来检查 PII 的类型是否有效。
A previous solution 在此问题上提出建议,建议使用第二个数组复制有效值,并根据该数组的内容检查字符串:
type PiiType = 'name' | 'address' | 'email';
isValidPii(value: string): Boolean {
const piiTypeValues = ['name', 'address', 'email'];
return piiTypeValues.indexOf(potentialValue) !== -1;
}
这对我们来说是不可取的,因为它需要两次定义类型,删除单一的事实来源并可能产生错误。
如何在不重复定义的情况下根据此联合类型检查给定值是否有效?
例如,如果有像isoftype 这样的运算符,我可以这样使用它:
'name' isoftype PiiType; // true
'hamburger' isoftype PiiType; // false
100 isoftype PiiType; // false
...但是这个运算符不存在,所以我不确定我们应该做什么来检查一个值是否对这种类型有效。 instanceof 存在但仅检查类/接口,typeof 仅返回 JavaScript 类型(例如 string 或 number)。
我们正在考虑使用枚举来表示这种类型,但我想先检查一下我们是否可以使用原生类型来代替。
【问题讨论】: