“共同根”的完整定义

时间:2014-02-05 22:49:51

标签: typescript

如果在同一个公共根目录中定义了多个块,则合并枚举,模块和接口。我在语言规范中找不到 common root 的官方定义。

是否比......更复杂。

或者:

  • 模块
  • 全球范围

(我能想到的唯一复杂因素是,如果一个模块被合并,那么被合并的模块的所有部分的成员将具有相同的公共根,所以当你去的时候它们都会拉上来。)

还有其他类型的共同根吗?

module X {
    export interface Y {
        name: string;
    }
}

module X{
    export interface Y {
        age: number;
    }
}

// X.Y has both name and age properties

1 个答案:

答案 0 :(得分:1)

它是图论理论意义上的“共同根”,因为TypeScript模块或程序的任何组合形成了一个声明树(因为任何声明只有一个父声明)。规范2.3节(“声明”)的后半部分确定了如何在建立父关系方面构建树。

我认为规范中的相关短语是声明合并,如果它们具有“相对于公共根的相同限定名称”。定义它的更简单的方法是“相同的完全限定名称”,但是这不会处理声明没有可以从全局范围限定的名称的情况(例如模块内部的未导出接口) )。

唯一的另一个复杂因素是外部模块中存在声明,其中文件的顶层是外部模块本身而不是全局模块:

export var x = 4;

/* Does not actually merge with the global 'Window', because
its parent is the external module */
interface Window {
}