【问题标题】:Strings are not type checked in Typescript?字符串没有在 Typescript 中进行类型检查?
【发布时间】:2017-03-10 01:51:52
【问题描述】:

有人能解释一下为什么下面的代码在打字稿中编译,理想情况下如何防止它这样做吗?

class Foo {}

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

bar("lol wat?")

编辑: 这只是一个快速编辑来解释我为什么遇到这个问题,希望能节省一些未来的人一些时间。 我定义了一个类型

type Message = MySubMessageType | SomeImportedConfigMessageType

SomeImportedConfigMessageType 被允许为空对象,因此我定义的任何接收我的一条消息的方法都可以接收任何东西。

【问题讨论】:

  • 它们是......只是你的 Foo 类实际上是一个空对象,可以被任何东西输入。 :)
  • 如果你向它添加一个属性或方法,你也会得到错误。 :)

标签: typescript types typescript-typings typescript2.0


【解决方案1】:

TypeScript 是 structurally typed

您声明方法Bar 以获取Foo 类型的参数。

您的类型Foo 不包含任何约束,除了它是一个对象。

字符串也是对象,因此它们与您的类型 Foo 兼容。

目前没有非 hacky 的方法可以在 TypeScript 中进行名义打字,但如果您有兴趣,您可能想看看这个github issue

【讨论】:

  • 嗯,字符串 <: js>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多