字符串在 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