有没有办法让JS强类型化?

End*_*ow8 1 javascript types type-conversion coercion type-coercion

JavaScript 是一种弱动态类型语言。我不介意动态类型,但是弱类型意味着当我最不期望的时候,意外的类型强制会带来很多挫败感。网上有很多文章声称可以解决这个问题,但它们都将弱类型与动态类型混淆,并提出了诸如 TypeScript 之类的解决方案。我想要一些更类似于 Python 类型行为的东西 - 动态类型变量,但没有隐式类型强制。有没有一种语言或库可以做到这一点?

Rap*_*let 8

不,事实并非如此,这就是构建Typescript的原因。
你的问题也有点与重复。看看吧,你可能会找到一些答案;)

也就是说,你可以使用一个好的 IDE,甚至Visual Studio Code也尝试帮助他们进行Javscript 类型检查,值得一看。

这是一个小实现示例

//@ts-check

export class Dog {
  /**
  * @param {string} name
  * @param {number} age
  */
  constructor(name, age) {
    super()
    this.name = name
    this.age = age
  }

  speak () {
    console.log(`${this.name}: No! No more talk!`)
  }
}

new Dog(7, 'Wez').speak() // <-- You should get an error here, it should be Dog('wez', 7)
Run Code Online (Sandbox Code Playgroud)

编辑
如果您确实想为网络拥有一种强类型语言,您可以:

  • @EnderShadow8 对于你的问题的标题“有没有办法让 JS 强类型化?” 正如所写和解释的那样,对于“是否有一种语言或库可以做到这一点?”的回答是否定的。我已经更新了我的回复,请参阅“编辑”。希望能帮助到你 (3认同)
  • 再说一遍,这是静态类型,而不是强类型。我的意思是像Python这样的东西。 (2认同)