2016-10-27 4 views
1

Может ли кто-нибудь объяснить, почему следующий код компилируется в машинописном тексте и в идеале, как его предотвратить?Строки не указаны в Typcript?

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

Hm, string <: empty record ... Yay JS похмелье. –

Смежные вопросы