代码之家  ›  专栏  ›  技术社区  ›  Pablo Fernandez

typescript抱怨有效javascript

  •  0
  • Pablo Fernandez  · 技术社区  · 11 年前

    这种定义javascript对象(或函数名称空间)的标准方法在typescript中失败 publicFunction does not exist on type {} 。这是故意的吗?

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

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

    2 回复  |  直到 11 年前
        1
  •  3
  •   André Werlang    11 年前

    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;
    }();
    
        2
  •  2
  •   Niet the Dark Absol    11 年前

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

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

    “正确”的方式可能是:

    var that = {
        publicFunction: function () {}
    };
    
    推荐文章