在TypeScript中从不使用isArray检查和推断类型

在TypeScript中从不使用isArray检查和推断类型,typescript,Typescript,我试图在TypeScript中执行一个简单的数组检查,但显然它所做的是推断,如果它不是数组(实际上接受typeany作为参数),那么它必须是typenever。我对TypeScript的工作原理感到好奇。用isArray处理此推断的正确方法是什么 代码是: if (Array.isArray(response)) { // do something } else { if (response.hasOwnProperty('myProperty')) { // FAILS com

我试图在TypeScript中执行一个简单的数组检查,但显然它所做的是推断,如果它不是数组(实际上接受type
any
作为参数),那么它必须是type
never
。我对TypeScript的工作原理感到好奇。用
isArray
处理此推断的正确方法是什么

代码是:

if (Array.isArray(response)) {
    // do something
} else {
    if (response.hasOwnProperty('myProperty')) { // FAILS compilation, because response is of type 'never' here.
        // do something else
    }
}
类似这样的检查也会产生同样的推论:
if(数组的响应实例)

有没有可能在没有显式施法的情况下实现这一点?

您可能正在寻找“!”符号 [


那么
(响应为任意)。hasOwnProperty('myProperty')呢
?事实上,强制转换确实有效,但似乎这不是解决这个推论的最佳方法?如果这是唯一的方法,那么我想我会用它运行。明白了。我也对你问题的另一个答案感兴趣。
响应的类型是什么?
?请分享你的大部分代码。如果你在el中得到
千万不要键入
这意味着响应对象显式地具有数组类型。
const response:number[] =[12];


if (Array.isArray(response)) {
    // do something
} else {
    if (response!.hasOwnProperty('myProperty')) { // will not fail thank to the non-null-assertion-operator
        // do something else

    }
}