Typescript 狭窄的未知物体

Typescript 狭窄的未知物体,typescript,Typescript,我有一个接受用户输入的函数,参数类型为unknown。我想断言 值是一个对象 value有一个名为的键“a” 函数x(值:未知){ 如果(值===null | |值的类型!=='object'){ 抛出新错误(“应为对象”); } 如果(!(‘a’值)){ 抛出新错误('预期对象包含属性“a'); } } Typescript抱怨“对象可能为'null'” 如何将未知缩小到一个对象?有趣的是,您只需切换支票的顺序:() 这是因为检查unknown是否为null并不能真正缩小范围,而是在值

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

  • 是一个对象
  • value
    有一个名为
    的键“a”
函数x(值:未知){
如果(值===null | |值的类型!=='object'){
抛出新错误(“应为对象”);
}
如果(!(‘a’值)){
抛出新错误('预期对象包含属性“a');
}
}
Typescript抱怨“对象可能为'null'”


如何将
未知
缩小到一个对象?

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


这是因为检查unknown是否为null并不能真正缩小范围,而是在值的
typeof!='对象“
它将可能的类型限制为
object
null
,因此根据该类型检查null大小写的范围会缩小。

OMG,我不敢相信切换条件的顺序可以解决问题。谢谢
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"');
    }
}