Typescript 类型脚本内部模块

Typescript 类型脚本内部模块,typescript,Typescript,我正在使用TypeScript内部模块将代码组织成逻辑块。 很像C程序集或Java jar 执行此操作时,此类内部模块中的TypeScript类将跨 不同的文件每个类一个文件。但是,仅当导出这些类时,引用此模块内的类才有效 当然,我希望将其中一些类保留在我的模块内部。 例如,假设我想将这两个类都保持在内部 /// Bicycle.ts module Sample { class Bicycle { } } /// Mountainbike.ts /// <referen

我正在使用TypeScript内部模块将代码组织成逻辑块。 很像C程序集或Java jar

执行此操作时,此类内部模块中的TypeScript类将跨 不同的文件每个类一个文件。但是,仅当导出这些类时,引用此模块内的类才有效

当然,我希望将其中一些类保留在我的模块内部。 例如,假设我想将这两个类都保持在内部

/// Bicycle.ts
module Sample {

    class Bicycle {
    }
}

/// Mountainbike.ts
/// <reference path="Bicycle.ts" />
module Sample {

    class Mountainbike extends Bicyle {
    }
}
使用visual studio 2013,这仅在将导出放在Bicycle类上时编译。 当我把这两个类放在一个文件中时,一切都正常。 我是不是遗漏了什么

谢谢你抽出时间,
Koen

TypeScript中没有模块内部的概念。可以从即时模块声明导出外部看到,也可以不导出

如果您有一组您想单独使用的类型,您可以对代码进行结构化,以便让消费者更清楚哪些类型不应使用:

module Sample {
    export module Internal {
        export class Bicycle { }
    }
}

/* Somewhere else */
module Sample {
    export class MountainBike extends Internal.Bicycle {

    }
}

请注意,由于模块始终可以重新打开,因此这种方法与模块内部的一些概念一样“安全”。您可以将其视为类似于C中没有公共名称空间或私有名称空间的概念。

这种方法的主要问题是,所有内部子模块都是实现细节,自动地在您的public.d.ts中结束,供每个人使用-创建对应该只是工件的事物的依赖。更糟糕的是,启用了declaration emit后,它会抛出错误TS4025、TS4029,迫使您导出所有相关的内部元素,因此您甚至无法再看到自己的代码库中的公共或内部元素。这是一个可怕的混乱,显然在这个时候没有好的答案:-