Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在TypeScript中使用声明文件_Javascript_Node.js_Typescript - Fatal编程技术网

Javascript 如何在TypeScript中使用声明文件

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

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

$ 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;