打字稿抱怨有效的javascript

时间:2015-02-14 16:18:16

标签: typescript

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

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

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

  return that;
}();

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

2 个答案:

答案 0 :(得分:3)

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;
}();

答案 1 :(得分:2)

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

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

“正确”的方式可能是:

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