有没有办法让tsc
解释导出构造函数+原型作为类型的外部模块?
在将大型代码库转换为TypeScript时,我发现typescript无法识别导出函数构造函数的外部模块,并且它的原型是类型。
function P() {...}
P.prototype.method = function() {...};
...
export = P;
如果我稍后import
这个文件,那么类型只是函数签名而不是类类。这给了我类型错误,例如:
import P = require('P');
var c:P = new P(); // cannot find name P
var c = new P(); // c has no type information
我知道我应该重写代码以使用带有类和接口的typescript类型,但如果我能逐步完成并且至少使用tsc
编译项目,那将是非常好的。 。我最近发现你可以使用导出单例对象的外部模块的类型:
var S = {...};
export S;
......并在另一个档案中:
import S = require('s');
interface C {
s:typeof S; // notice the "typeof"
}
你可以使用typeof
的打字稿的实例类型并不明显,而且非常隐藏在文档中。我想知道在使用普通的javascript原型时是否有这样的技巧。
答案 0 :(得分:2)
如果我理解它是正确的,那么你有' javascript'样式打字稿文件。
您可能需要选择要对当前代码执行的操作。将其保留为.js或将其转换为.ts
我们遇到了相同的情况,我们选择保留.js并为.js文件生成.d.ts文件。仅适用于我们在.ts中使用的函数和类,仅在我们需要时才使用。
最后,它对我们使用的.js函数以及过时的代码提供了非常好的概述。
答案 1 :(得分:1)
正如Martijn所提到的,您可能只想创建一个.d.ts
。我怀疑你已经得出了这个结论,并寻求如何做到这一点的指导。
针对您的特定情况p.d.ts
:
declare module "P" {
class P {
method:Function;
}
export = P;
}
用法:
/// <reference path="./p.d.ts"/>
import P = require("P");
var p = new P();
p.method(); // OKay