javascript 是否支持抽象数据类型?

Is javascript support abstract data type?

javascript是否支持抽象数据类型?

我搜索了很多但没有找到任何答案。我认为它不支持对吗?

不,但你可以使用 new.target:

模拟它(在 ES2015+ 中)

class Abstract {
  constructor(value) {
    if (new.target === Abstract) {
      throw new Error("Abstract is abstract");
    }
    this.value = value; // Proof that if the check above is false,
                        // we *do* continue to set up the instance
  }
}
class Concrete extends Abstract {
}
try {
  const a = new Abstract(1);
  console.log("Got Abstract instance, value = " + a.value);
} catch (e1) {
  console.error(e1);
}
try {
  const c = new Concrete(2);
  console.log("Got Concrete instance, value = " + c.value);
} catch (e2) {
  console.error(e2);
}

遗憾的是,这只会在尝试执行实例化的代码行运行时产生错误,而不是在 parsed/compiled.

TypeScript 是 JavaScript 的派生物,添加了类型检查和其他一些东西,具有 abstract classes 的概念,在 TypeScript 编译阶段(当 TypeScript被编译[或"transpiled"]到JavaScript);这些信息也可供 IDE 等用于即时反馈。