在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ 為什么Class B可以通過(guò)Typescript編譯(類型監(jiān)測(cè)), Class

為什么Class B可以通過(guò)Typescript編譯(類型監(jiān)測(cè)), Class C卻不能通過(guò), 期望Class B也不能通過(guò)編譯

我希望Class B像Class C一樣不能通過(guò)編譯,
Class C 編譯會(huì)報(bào)錯(cuò)如下:

Type '{ name: string; some: string; }' is not assignable to type 'Info'.
Object literal may only specify known properties, and 'some' does not exist in type 'Info'.


    interface Info {
      name: string;
    }
    
    interface Person {
      info(): Info;
    }
    
    class B implements Person {
        info() {
            return {
                name: "li",
                some: "1",
            };
        }
    }
    
    class C {
        info():Info {
            return {
                name: "li",
                some: "1",
            };
        }
    }
回答
編輯回答
朕略傻

class C能通過(guò)編譯?

2018年9月11日 21:29
編輯回答
解夏

翻譯成人話,class B

  • class B implements Person
  • B實(shí)現(xiàn)了Person接口
  • B.info的返回值滿足Info的定義
  • { name: "li", some: "1" }滿足了{ name: string }的定義
  • 通過(guò)

class C

  • info(): Info
  • info的返回值就是Info
  • { name: "li", some: "1" }{ name: string }不完全一致
  • 不通過(guò)

不太明白為什么希望BC一樣不能通過(guò)編譯……

TypeScript的核心原則之一是對(duì)值所具有的結(jié)構(gòu)進(jìn)行類型檢查。 它有時(shí)被稱做“鴨式辨型法”或“結(jié)構(gòu)性子類型化”。

對(duì)于期待Info類型的變量來(lái)說(shuō),傳遞進(jìn)來(lái)的對(duì)象多一兩個(gè)屬性也是毫無(wú)影響的。所以B能通過(guò)正是TypeScript的設(shè)計(jì)目標(biāo)之一。

如果因?yàn)橐恍┢婀??的原因,一定要讓B掛掉的話,可以用樓上的方法。

2017年8月7日 22:29
編輯回答
野橘
class B implements Person {
    info():Info {
        return {
            name: "li",
            some: "1",
        };
    }
}
2017年4月3日 22:51