这种非常标准的定义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>{};
,但我想知道为什么这是必要的。
答案 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 () {}
};