如何在TypeScript中使用声明文件

当涉及到用纯Javascript编写的声明文件和第三方库时,我没有在TypeScript中获得这些东西。 假设我有以下Javascript类:

$ cat SomeClass.js var SomeClass = (function () { function SomeClass() { } SomeClass.prototype.method1 = function () { return "some string"; }; return SomeClass; })(); exports.SomeClass = SomeClass; 

我想获得types检查,所以我创build了这样的声明文件:

 $ cat test.d.ts class SomeClass { public method1(): string; } 

然后我想在一些代码中使用类和声明文件:

 $ cat main.ts ///<reference path="./test.d.ts"/> import ns = module("./SomeClass"); function test(): string { var sc = new ns.SomeClass(); return sc.method1(); } 

当我尝试编译它,我得到这个:

 $ tsc main.ts main.ts(2,19): The name '"./SomeClass"' does not exist in the current scope main.ts(2,19): A module cannot be aliased to a non-module type main.ts(5,16): Expected var, class, interface, or module 

从我所知道的情况来看,导入语句需要一个实际的TypeScript类来存在,并且引用语句不足以帮助编译器找出如何处理它。

我试图改变它

 import ns = module("./test.d"); 

但也没有骰子。

我能得到这个实际编译和运行的唯一方法是使用require语句而不是import,如下所示:

 $ cat main.ts ///<reference path="./node.d.ts"/> ///<reference path="./test.d.ts"/> var ns = require("./SomeClass"); function test(): string { var sc = new ns.SomeClass(); return sc.method1(); } 

这个代码的问题是TypeScript没有运行任何types检查。 事实上,我可以完全删除线路

 ///<reference path="./test.d.ts"/> 

它不会改变任何东西。

但是,如果我删除了require语句,则可以进行types检查,但由于没有require语句,因此代码在运行时会爆炸。

 $ cat main.ts ///<reference path="./test.d.ts"/> function test(): string { var sc = new SomeClass(); return sc.method1(); } test(); $ node main.js main.js:2 var sc = new SomeClass(); ^ ReferenceError: SomeClass is not defined ... 

猫testing

 declare module "SomeClass.js" { class SomeClass { method1(): string; } } 

猫Main.ts

 ///<reference path="test.d.ts"/> import ns = module("SomeClass.js"); function test() { var sc = new ns.SomeClass(); return sc.method1(); } 

tsc Main.ts – 声明

猫Main.js

 var ns = require("SomeClass.js") function test() { var sc = new ns.SomeClass(); return sc.method1(); } 

猫Main.d.ts

 import ns = module ("SomeClass.js"); function test(): string;