TS v3.x带来了新的类型:unknown
。但是,如何使用这种类型而不是any
还不是很清楚。
示例:您正在使用一些没有类型的第三方库。而且您没有时间自己编写这些类型。您需要处理该库提供的一些数据。
在unknown
之前:
function handle(data: any) {
if (data && data.arrayProp && typeof data.arrayProp[Symbol.iterator] === 'function') {
for (let x of data.arrayProp) {...}
}
}
使用unknown
:
function handle(data: unknown) {
// this line gives TS error: `data` is unknown type
if (data && data.arrayProp && typeof data.arrayProp[Symbol.iterator]=== 'function') {
...
互联网上的大多数文档都使用instanceof
种方式来检查data
的类型。但是我对data
的类型并不真正感兴趣。我想知道的是那里是否有arrayProp
。就是这样
如何通过unknown
类型执行此操作?
答案 0 :(得分:2)
unknown
的用处在于您必须先缩小其类型,然后才能使用它。您可以为此使用自定义类型防护:
interface ArrayProp {
arrayProp: []
}
function isArrayProps(value: unknown): value is ArrayProp {
return !!value && !!(value as ArrayProp).arrayProp;
}
function handle(data: unknown) {
if (isArrayProps(data) && typeof data.arrayProp[Symbol.iterator] === 'function') {
}
}