2016-10-27 57 views
1

有人可以解釋爲什麼下面的代碼在打字稿中編譯,理想情況下如何防止它這樣做?在Typescript中不檢查字符串類型嗎?

class Foo {} 

function bar(f : Foo) { 
    console.log(f) 
} 

bar("lol wat?") 

編輯: 這僅僅是一個快速的編輯解釋爲什麼我就遇到了這個問題,有希望節省一些未來的人一些時間。 予定義的類型

type Message = MySubMessageType | SomeImportedConfigMessageType 

SomeImportedConfigMessageType被允許爲一個空對象,並且因此任何方法我定義服用我的消息中的一個將採取什麼。保持安全!

+2

他們是......這只是你的Foo類真的是一個空的對象,可以由任何東西打鴨子。 :) – toskv

+0

如果你要添加一個屬性或方法,你也會得到錯誤。 :) – toskv

回答

2

TypeScript是structurally typed

您申報方法Bar採取Foo類型的參數。

你的類型Foo含有不超過它的對象之外的任何約束。

字符串也是對象,因此它們與您的類型Foo兼容。

目前沒有非哈克的方式來獲得打字稿名義打字,但如果你有興趣,你可能想看看這個github issue

+0

嗯,string <:空記錄... Yay JS宿醉。 –

相關問題