Javascript 如何在TypeScript中使用声明文件
当涉及到用纯Javascript编写的声明文件和第三方库时,我在TypeScript中没有得到一些东西。假设我有以下Javascript类:Javascript 如何在TypeScript中使用声明文件,javascript,node.js,typescript,Javascript,Node.js,Typescript,当涉及到用纯Javascript编写的声明文件和第三方库时,我在TypeScript中没有得到一些东西。假设我有以下Javascript类: $ cat SomeClass.js var SomeClass = (function () { function SomeClass() { } SomeClass.prototype.method1 = function () { return "some string"; }; re
$ cat SomeClass.js
var SomeClass = (function () {
function SomeClass() {
}
SomeClass.prototype.method1 = function () {
return "some string";
};
return SomeClass;
})();
exports.SomeClass = SomeClass;
我想对它进行类型检查,所以我创建了如下声明文件:
$ cat test.d.ts
class SomeClass {
public method1(): string;
}
$ 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();
}
然后我想在一些代码中使用类和声明文件:
$ cat main.ts
///<reference path="./test.d.ts"/>
import ns = module("./SomeClass");
function test(): string {
var sc = new ns.SomeClass();
return sc.method1();
}
据我所知,import语句需要存在一个实际的TypeScript类,而reference语句不足以帮助编译器了解如何处理它
我试着把它改成
import ns = module("./test.d");
但也没有骰子
我能让它真正编译和运行的唯一方法是使用require语句而不是import,如下所示:
$ cat test.d.ts
class SomeClass {
public method1(): string;
}
$ 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();
}
$cat main.ts
///
///
var ns=需要(“./SomeClass”);
函数测试():字符串{
var sc=新的ns.SomeClass();
返回sc.method1();
}
这段代码的问题是TypeScript没有运行任何类型检查。事实上,我可以完全删除该行
///<reference path="./test.d.ts"/>
///
这不会改变任何事情
然而,如果我删除require语句,我可以进行类型检查,但是代码在运行时会崩溃,因为没有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
...
$cat main.ts
///
函数测试():字符串{
var sc=新的SomeClass();
返回sc.method1();
}
test();
$node main.js
main.js:2
var sc=新的SomeClass();
^
ReferenceError:未定义SomeClass
...
cat测试d.ts
declare module "SomeClass.js" {
class SomeClass {
method1(): string;
}
}
///<reference path="test.d.ts"/>
import ns = module("SomeClass.js");
function test() {
var sc = new ns.SomeClass();
return sc.method1();
}
var ns = require("SomeClass.js")
function test() {
var sc = new ns.SomeClass();
return sc.method1();
}
import ns = module ("SomeClass.js");
function test(): string;
cat Main.ts
declare module "SomeClass.js" {
class SomeClass {
method1(): string;
}
}
///<reference path="test.d.ts"/>
import ns = module("SomeClass.js");
function test() {
var sc = new ns.SomeClass();
return sc.method1();
}
var ns = require("SomeClass.js")
function test() {
var sc = new ns.SomeClass();
return sc.method1();
}
import ns = module ("SomeClass.js");
function test(): string;
cat Main.d.ts
declare module "SomeClass.js" {
class SomeClass {
method1(): string;
}
}
///<reference path="test.d.ts"/>
import ns = module("SomeClass.js");
function test() {
var sc = new ns.SomeClass();
return sc.method1();
}
var ns = require("SomeClass.js")
function test() {
var sc = new ns.SomeClass();
return sc.method1();
}
import ns = module ("SomeClass.js");
function test(): string;