2016-04-23 76 views

回答

2

运算符重载不能正常支持在JavaScript /打字稿。 如果您尝试调用某个类,则无法定义调用的函数(构造函数除外)。

+0

确实没有真正的操作重载,但你仍然可以做一些 - 当然是有限的 - 类似于操作重载的东西[这里是一个例子](https://jsfiddle.net/gvo86g6c/)。 –

2

有没有办法在打字稿实现这一目标?

为什么不。因为它可以用普通的JavaScript来完成,所以在TypeScript中也很容易实现。与功能几乎一样,范围是我们方法的关键字。 当然,构造函数会被误用为闭包而不会创建会响应Container通过typeof运营商。这样的工厂函数将返回另一个函数,然后将其用作构造函数的封闭初始值的getter/setter。

打字稿例如...

class Container { 

    constructor(storageValue: any) { 
     return (function (value: any) { 

      if (arguments.length !== 0) { 
       storageValue = value; 
      } 
      return storageValue; 
     }); 
    } 
} 

...在普通的JavaScript ...

var Container = (function ContainerClass() { 

    var Constructor = (function Container (storageValue) { 
     return (function (value) { 

      if (arguments.length !== 0) { 
       storageValue = value; 
      } 
      return storageValue; 
     }); 
    }); 
    return Constructor; 

}()); 

var a = new Container(24); 

console.log("a() : ", a()); // 24 
console.log("a(4) : ", a(4)); // 4 
console.log("a() : ", a()); // 4 

var b = new Container(72); 

console.log("b() : ", b()); // 72 
console.log("b(5) : ", b(5)); // 5 
console.log("b() : ", b()); // 5 

console.log("a() : ", a()); // 4 
+1

而不是'if(UNDEFINED_VALUE!== value){'最好使用arguments.length === 0',因为'a()'和'a(undefined)'是两个不同的东西。 –

+0

你显然是对的。 –

+0

这不是类型安全的。如果您在任何地方放置“任何”,使用TypeScript是毫无意义的。 – Yaroslav

相关问题