如何使用只读数组(Array.isArray()
)进行数组检查(如ReadonlyArray
)?
例如:
type ReadonlyArrayTest = ReadonlyArray<string> | string | undefined;
let readonlyArrayTest: ReadonlyArrayTest;
if (readonlyArrayTest && !Array.isArray(readonlyArrayTest)) {
// Here I expect `readonlyArrayTest` to be a string
// but the TypeScript compiler thinks it's following:
// let readonlyArrayTest: string | readonly string[]
}
对于通常的数组,typescript编译器正确地识别出它必须是if条件中的字符串。
最佳答案
Here's打印脚本中的相关问题。
建议@jcalz的解决方法是在isArray
的声明中添加重载:
declare global {
interface ArrayConstructor {
isArray(arg: ReadonlyArray<any> | any): arg is ReadonlyArray<any>
}
}