繁体   English   中英

Typescript子命名空间和环境模块

[英]Typescript Child Namespaces and Ambient Modules

我有一个难题。 我对Typescript还是很陌生,但是到目前为止,我一直很喜欢。 想要成为一名优秀的开发人员,并在逻辑上将我的模块分组到命名空间中,我遇到过一种难得的事情吗? 问题。 这是重现问题的最简单示例。

假设您有一个类...我们将其称为ClassA,它引用一个恰当地命名为ClassB的类,该类位于子名称空间中。

namespace Foo {
    export class ClassA {
        public classB: Bar.ClassB;
        public constructor() {

        }
    }
}

namespace Foo.Bar {
    export class ClassB {
        public constructor() {

        }
    }
}

Typescript对此不满意。 好吧,当我想为ClassA导入内容时,我将其放入命名空间中,如下所示:

namespace Foo {
    import SomeClass = SomewhereElse.SomeClass;
    export class ClassA {
        public classB: Bar.ClassB;
        public constructor() {

        }
    }
}

再说一次。。。 但是,如果我想导入环境模块怎么办?

namespace Foo {
    import * as SockJS from "sockjs-client"; // TS1147 GRUMBLE! CAN'T DO DAT HERE!
    export class ClassA {
        public classB: Bar.ClassB;
        public constructor() {

        }
    }
}

好没问题。 我只是将其移到命名空间之外,就像它告诉我那样。

import * as SockJS from "sockjs-client";

namespace Foo {
    export class ClassA {
        public classB: Bar.ClassB; // TS2503:Now you're just a Bar that I used to know
        public constructor() {

        }
    }
}

突然打字稿失忆,不知道Bar是什么。 它不能识别子名称空间。 我已经尝试过几种方法来使其记住,例如嵌套名称空间或将其导出,但是没有任何方法可以使它识别出来。 什么是迪利哟? 你们中任何酷的猫都知道发生了什么事或如何解决它并保留子命名空间?

突然打字稿失忆,不知道Bar是什么。 它不能识别子名称空间。 我已经尝试过几种方法来使其记住,例如嵌套名称空间或将其导出,但是没有任何方法可以使它识别出来。 什么是迪利哟

这是因为名称空间全局的 并且模块模块化的 因此,只要将模块导入文件中, 文件即成为模块 https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

建议

请使用模块。 原因很多: https : //github.com/TypeStrong/atom-typescript/blob/8d43dd1b930a6df0ce62454a1560acfb7eee24c9/docs/out.md

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM