打字稿抱怨有效 javascript

typescript complaining about valid javascript

这种定义 javascript 对象(或函数的命名空间)的标准方法在打字稿中失败了,说 publicFunction does not exist on type {}。这是设计使然吗?

var MyObject = function (){
  var that = {};

  var privateFunction = function () {};
  that.publicFunction = function () {};

  return that;
}();

PS:通过将第一行更改为 var that = <any>{}; 找到了 "fix",但我想知道为什么这是必要的。

我对打字稿一无所知,我会冒险猜测,从它的名字来看,它是严格打字的。这意味着您不能为创建对象时不存在的对象定义属性。

<any>{} 覆盖此限制,为您提供一个您可以可以 定义任意属性的对象。

"correct" 方式可能是:

var that = {
    publicFunction: function () {}
};

TypeScript 推断 that 具有类型 {},一个空对象。不过,拥有一个具有任何属性的对象可能没有多大意义。

var that = {};

您已通过断言其类型为 any 来解决问题。另一种方法是:

var that;
that = {};

这样 TypeScript 就不会推断变量类型。

要利用 TS 优势,最好一次声明所有对象成员。如果你不能,你可以使用一个接口:

interface MyObjectInterface {
    publicFunction();
}

var MyObject = function (){
  var that = <MyObjectInterface>{};

  var privateFunction = function () {};
  that.publicFunction = function () {};

  return that;
}();