typescript - 狭窄的未知对象

标签 typescript

我有一个接受用户输入的函数,参数类型是 unknown .我想断言...

  • value是一个对象
  • value有一个名为 "a" 的 key

  • function x(value: unknown){
        if(value === null || typeof value !== 'object'){
            throw new Error('Expected an object');
        }
    
        if(!('a' in value)){
            throw new Error('Expected an object to contain property "a"');
        }
    }
    
    typescript 提示“对象可能是‘空’”……
    Object is possibly null
    如何缩小范围 unknown到一个对象?

    最佳答案

    有趣的是,你只需要切换支票的顺序:( playground )

    function x(value: unknown){
        if(typeof value !== 'object' || value === null){
            // ^^^^ check type and then check null ^^
            throw new Error('Expected an object');
        }
    
        if(!('a' in value)){
            throw new Error('Expected an object to contain property "a"');
        }
    }
    
    这是因为检查 unknown 不为 null 不能真正缩小范围,但在 typeof value !== 'object' 之后它将可能的类型限制为 objectnull因此,针对该类型检查 null 大小写确实会按照您想要的方式缩小范围。

    关于typescript - 狭窄的未知对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64683427/

    相关文章:

    typescript - "{}"作为 Typescript 中的类型

    typescript - 对象类型上不存在属性 'map'

    TypeScript:类型上不存在抑制属性

    javascript - 为什么这个函数组件在 setState 之后没有重新渲染?

    angular - 如何在 Webstorm 的 Angular 2 模板中删除背景颜色

    javascript - 使用 typescript 定义 Angular Directive(指令)的最简单方法和示例

    JavaScript:如果函数返回 null,则快速返回

    javascript - Angular2 中的事件委托(delegate)

    angular - 将 Observable 类型添加到 TypeScript 接口(interface)

    reactjs - Typescript React - 与类型 'IntrinsicAttributes' 没有共同的属性