【问题标题】:Imported classes does not appear on d.ts file导入的类不会出现在 d.ts 文件中
【发布时间】:2014-09-23 03:15:39
【问题描述】:

这和这个问题有关:Can I import a TypeScript class from my own module to global?

我已经制作了一个模块,我想将一个类公开给全局范围。

module Foo {
    export class Bar {
        x: number
    }

    /* Some more interfaces and classes to be used only in this module */
}

一开始我做了一个接口,定义了一个新的变量来实现这个。

interface Bar extends Foo.Bar {
}
var Bar = Foo.Bar;

生成的 JavaScript 将我的 Bar 作为变量。

var Foo;
(function (Foo) {
    var Bar = (function () {
        function Bar() {
        }
        return Bar;
    })();
    Foo.Bar = Bar;
})(Foo || (Foo = {}));

var Bar = Foo.Bar;
//# sourceMappingURL=app.js.map

d.ts 文件包含我的全局 Bar 接口和变量。

declare module Foo {
    class Bar {
        public x: number;
    }
}
interface Bar extends Foo.Bar {
}
declare var Bar: typeof Foo.Bar;

然后,我注意到我可以简单地使用 import 来公开我的类,我就这样做了。

import Bar = Foo.Bar;

生成的 JavaScript 文件完全相同。

var Foo;
(function (Foo) {
    var Bar = (function () {
        function Bar() {
        }
        return Bar;
    })();
    Foo.Bar = Bar;
})(Foo || (Foo = {}));
var Bar = Foo.Bar;
//# sourceMappingURL=app.js.map

但是,我的 d.ts 文件现在不包含有关全局 Bar 的任何信息。

declare module Foo {
    class Bar {
        public x: number;
    }
}

这是预期的结果吗?我认为这会导致错误,因为当我在其他项目中包含 JavaScript 文件和 d.ts 文件时,它允许声明具有相同名称的变量。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    这原来是当前编译器中的一个错误,新的编译器似乎已经修复了这个问题。见:https://github.com/Microsoft/TypeScript/issues/346

    更正声明:

    declare module Foo {
        class Bar {
            x: number;
        }
    }
    import Bar = Foo.Bar;
    

    【讨论】:

    • 下次考虑用最少的例子,我们也不需要翻译TypeScript代码。
    【解决方案2】:

    当您使用 import 语句时,编译器假定定义在别处。

    例如,如果您从fileA.ts 将某些内容导入fileB.ts,则生成的fileA.d.ts 将已经包含声明,如果它还包含声明,则会与fileB.d.ts 冲突。

    所以我会说这种行为是故意的。

    【讨论】:

    • fileA.d.ts 不会在自己的模块中声明吗?也许ModuleA.ClassA。 fileB.d.ts 会在全球范围内拥有它,也许只是ClassA。我认为ModuleA.ClassAClassA的声明不应该互相冲突。
    猜你喜欢
    • 2016-12-26
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多