我正在将现有的JavaScript应用程序转换为Typescript。我从:
开始// file1.js
(function(ns) {
ns.bar = function() { };
}(window.MyNamespace || {}));
// file2.js
(function(ns) {
ns.Item = function() {
this.doStuff = function() { ns.bar(); };
}
}(window.MyNamespace || {}));
现在我正在将file2.js
转换为TypeScript:
module MyNamespace {
class Item {
doStuff() {
MyNamespace.bar(); // This is obviously a problem
}
}
}
调用bar
时出现问题。我知道将file1.js
转换为TypeScript会使事情变得更容易,但实际上该文件非常大,所以我想在下一个sprint进行转换并获得中间情况。
我该如何解决?如何告诉tsc bar
是模块本身的函数 ?
我在declare var bar: () => void;
及其变体中尝试了module
,但到目前为止还没有让它发挥作用。
我知道我可以考虑将这些“命名空间函数”转换为类上的静态方法,但这需要重写file1.js
now ,这是我不想要的(还是)
我有这样的解决方法:
module MyNamespace {
var ns: any = MyNamespace;
class Item {
doStuff() {
ns.bar();
}
}
}
但是感觉有点偏差,至少因为它需要在我的class
内部进行更改,而我更希望在file2.ts
和{之间建立一座桥梁{1}}与最终的file1.ts
内容分开。
从本质上讲,我觉得我正在编写一个file2.ts
文件,用于我原来的.d.ts
功能,这将使file1.js
以某种方式 工作将file2.ts
转换为file1.js
后可以保持不变。
任何提示?如何为未转换的.ts
创建输入?
答案 0 :(得分:1)
向模块添加声明语句 next ,如下所示:
declare module MyNamespace {
var bar: () => void;
}
module MyNamespace {
class Item {
doStuff() {
MyNamespace.bar(); // This will compile!
}
}
}
一旦您将file1.js转换为Typescript
,您就可以(应该)删除bar
方法的临时声明