2016-10-27 13 views
1

次のコードがtypescriptでコンパイルされる理由を説明できる人がいますか?文字列はTypescriptで型チェックされていませんか?

class Foo {} 

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

bar("lol wat?") 

EDIT: これは私がうまくいけば、いくつかの将来の人々にいくつかの時間を節約するために、この問題に遭遇した理由を説明するだけで簡単に編集です。 私は

type Message = MySubMessageType | SomeImportedConfigMessageType 

SomeImportedConfigMessageTypeが空のオブジェクトであることを許可されたタイプを定義し、したがって、任意の方法私は何を取る私のメッセージのいずれかを取って定義されました。そこに安全に滞在してください!

+2

彼らはあなたのFooクラスが本当に空のオブジェクトであり、どんなものでもタイプされていることができます。 :) – toskv

+0

プロパティやメソッドを追加すると、エラーも発生します。 :) – toskv

答えて

2

タイプスクリプトはstructurally typedです。

メソッドBarに、タイプFooの引数を指定すると宣言します。

タイプFooにはオブジェクト以外の制約はありません。

文字列もオブジェクトなので、タイプFooと互換性があります。

現在のところ、TypeScriptで名目上のタイピングを行うための非ハックな方法はありませんが、興味がある場合はgithub issueをチェックアウトしてください。

+0

うーん、文字列<:空のレコード...さよならJS hangover。 –

関連する問題