亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

如何判斷一個對象是否符合 TypeScript 接口 —— 跟進篇

有些评论者指出我的最近的一个解决方案是不正确的。他们是对的。我多下了一番功夫,把它解决了。为了我亲爱的读者们,我愿意做任何事情!

我当前的解决方案是这样的:

    const 判断是否为TS接口 = <T>(值: any, keys: (keyof T)[], requiredKeys: (keyof T)[]): 值是T => {  
        if (typeof 值 !== 'object' || 值 === null)  
            return false;  

        return(  
            requiredKeys.every(键 => 键 in 值) &&                              // 确保所有必需的属性都存在  
            (Object.keys(值) as (keyof T)[]).every(键 => keys.includes(键))    // 确保没有额外的键存在  
        );  
    }

这里教你用它:

    接口 Cat {  
      name: string;  
      color: 'tabby' | 'calico' | 'black' | 'white' | 'bald';  
      小猫数量?: number;  
    }  

    const invalidCat = {  
      name: 'Nyako',  
      color: 'white',  
      ownerName: 'Power' // 主人名字  
    }  

    const properCat = {  
      name: 'Chomosuke',  
      color: 'black'  
    }  

    console.log(isTSInterface<Cat>(  
      invalidCat,   
      ['name', 'color', '小猫数量'],   
      ['name', 'color']  
    ));  // 会返回 false  

    console.log(isTSInterface<Cat>(  
      properCat,   
      ['name', 'color', '小猫数量'],   
      ['name', 'color']  
    ));  // 会返回 true

该函数会检查传入的值,并返回一个布尔值,表示该值是否符合接口规范。所有可能的接口字段名称作为第一个字符串数组传递,必需字段名称作为第二个参数传递。我没有发现其他可靠的方法来“识别”它们。如果你有更好的方法,请在评论中分享!

null值有点让人困惑,因为null可能实现某个接口,也可能不实现。例如,这种情况是有效的,即这个null应该能通过验证器,而普通的null是通不过的:

    const cat = null as Cat;

这里将 cat 变量初始化为 null,并指定其类型为 Cat

我决定对于所有 null 值返回 false。毕竟,你又能从一个 null 中检查出什么呢?如果值为 null,直接不调用验证函数即可。我认为没有好的方法来验证一个 null 是否满足某个接口的要求。如果你有好的方法,请在评论中分享!

首先,该函数检查对象是否拥有所有必要的键。然后检查是否有任何键不在接口定义中。如果两项检查都通过,则返回 true

希望2.0版本更对你们的胃口!

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消