我应该尝试在 JavaScript 类 中强制执行强数据类型吗?

Should I try to enforce strong data-typing in my JavaScript classes?

我正在编写一个 JavaScript 库,我打算经常使用它,最终可能会公开发布。现在,我正在做很多函数和 "class constructor" 定义,如下所示:

function Point(x, y)
{
  this.y = typeof y !== 'undefined' ? y : 0;
  this.x = typeof x !== 'undefined' ? x : 0;

  if (typeof this.x === "number" && typeof this.y === "number")
  {
    this.x = x;
    this.y = y;
  }
  else if (this.x instanceof Point && typeof this.y === "undefined")
  {
    this.x = x.x;
    this.y = x.y;
  }
  else
  {
    throw ("Point() Constructor: Invalid arguments.");
  }
}

这让我不仅可以为这个 "class" 拥有 "two different constructors",而且还可以确保在实例化对象时,它具有预期的类型,并且半有用的错误是如果没有则抛出。

这在一段时间内似乎是个好主意,但现在我正在以某种方式进入它,并且我已经了解了其他产品 JavaScript 来源(例如 Mozilla 的东西) ),我开始重新考虑,因为人们并没有真正这样做。现在我想知道,"why am I trying to force a loosely-typed language to conform to these strict typing standards?"

JavaScript 库在错误处理和类型检查方面应遵循的预期标准是什么?

可能与 this question 略有关联,但我正在寻找自己的东西。

通过尝试强制强类型化,您最终是在与语言作对。这种方法有它的用武之地,但使用 TypeScript.

之类的方法可以更容易地实现

使用这种方法时,您必须问自己的最大问题是,您是否已经考虑并涵盖了您在应用程序中需要处理的所有问题领域,这是否可以扩展到解决您可能不会解决的其他问题想到。如果是,这种方法会不会太难维护,例如您是否觉得可以花时间和精力以这种方式创建所有构造函数、函数等,以确保一切都遵循既定标准?这很重要,因为虽然 JavaScript 处理你正在做的事情,但你可以说这不在语言的 "spirit" 中,这或多或少意味着语言不会帮助你实现你的目标这样写代码。