字符串在 Typescript 中没有类型检查?
Strings are not type checked in Typescript?
有人可以解释为什么以下代码可以在 typescript 中编译,最好是如何防止它这样做吗?
class Foo {}
function bar(f : Foo) {
console.log(f)
}
bar("lol wat?")
编辑:
这只是一个快速编辑来解释为什么我 运行 进入这个问题,希望能为未来的人节省一些时间。
我定义了一个类型
type Message = MySubMessageType | SomeImportedConfigMessageType
SomeImportedConfigMessageType
被允许为一个空对象,因此我定义的任何接收消息的方法都可以接收任何消息。
TypeScript 是 structurally typed.
您声明方法 Bar
以获取类型 Foo
的参数。
您的类型 Foo
除了它是一个对象之外不包含任何约束。
字符串也是对象,因此它们与您的类型兼容 Foo
。
目前在 TypeScript 中没有非 hacky 的方式来获得名义类型,但如果您有兴趣,您可能想看看这个 github issue。
有人可以解释为什么以下代码可以在 typescript 中编译,最好是如何防止它这样做吗?
class Foo {}
function bar(f : Foo) {
console.log(f)
}
bar("lol wat?")
编辑: 这只是一个快速编辑来解释为什么我 运行 进入这个问题,希望能为未来的人节省一些时间。 我定义了一个类型
type Message = MySubMessageType | SomeImportedConfigMessageType
SomeImportedConfigMessageType
被允许为一个空对象,因此我定义的任何接收消息的方法都可以接收任何消息。
TypeScript 是 structurally typed.
您声明方法 Bar
以获取类型 Foo
的参数。
您的类型 Foo
除了它是一个对象之外不包含任何约束。
字符串也是对象,因此它们与您的类型兼容 Foo
。
目前在 TypeScript 中没有非 hacky 的方式来获得名义类型,但如果您有兴趣,您可能想看看这个 github issue。