有人可以解释为什么以下代码在打字稿中编译,理想情况下如何防止它这样做?
class Foo {}
function bar(f : Foo) {
console.log(f)
}
bar("lol wat?")
编辑: 这只是一个快速编辑,以解释为什么我遇到这个问题,希望有一些时间保存一些未来的人。 我定义了一个类型
type Message = MySubMessageType | SomeImportedConfigMessageType
允许SomeImportedConfigMessageType是一个空对象,因此我定义的任何一个方法都会占用我的一条消息。保持安全!
答案 0 :(得分:2)
TypeScript是structurally typed。
您声明方法Bar
采用类型为Foo
的参数。
您的类型Foo
除了它是一个对象之外不包含任何约束。
字符串也是对象,因此它们与您的类型Foo
兼容。
目前没有非hacky方法可以在TypeScript中进行名义输入,但如果您有兴趣,可以查看github issue。