如何使用只读数组(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>
    }
}

09-17 11:43