Typescript 接口合并是否仅限于当前范围?

Typescript 接口合并是否仅限于当前范围?,typescript,Typescript,我正在尝试使用TypeScript编译器v3.5.3编译以下代码: interface X { test1():void } var createX=function():X{ var x:X=({} as X); x.test1=function(){return;} // raises error "Property 'test1' does not exist on type 'X'". interface X { test2():void

我正在尝试使用TypeScript编译器v3.5.3编译以下代码:

interface X {
    test1():void
}
var createX=function():X{
    var x:X=({} as X);
    x.test1=function(){return;} // raises error "Property 'test1' does not exist on type 'X'".
    interface X {
        test2():void
    }
    x.test2=function(){return;}
    return x; // raises error "Property 'test1' is missing in type 'X' but required in type 'X'"
};
编译错误
属性“test1”在类型“X”上不存在
表明接口合并仅限于当前范围。将
test2
的定义移出
createX
函数时,代码段编译时不会出错:

interface X {
    test1():void
}
interface X {
    test2():void
}
var createX=function():X{
    var x:X=({} as X);
    x.test1=function(){return;}
    x.test2=function(){return;}
    return x;
};

接口合并是否仅限于定义接口的范围?如果是,是否有方法将作用域接口定义与全局接口定义合并?

否。这些声明在词汇上的作用域与函数中声明的所有其他声明相同。用例是什么?@AluanHaddad:我不想编写单独的声明文件,也不想将所有声明和文档放在脚本的顶部,而是想在开始定义相应函数的行的正上方添加这些内容(这样更容易维护IMO)。由于我的脚本返回的是一个creator函数,其中包含所有封装的功能,因此我必须在该creator函数中编写声明。我明白您的意思,但如果这很重要,您的文件可能太长,需要拆分以便于维护。@AluanHaddad:您可能是对的,但我认为我所描述的问题可能有一个解决办法。请你把你的回答变成一个简短的回答,这样我就可以把这个问题标记为完成了?如果没有其他人神奇地提供任何解决方案,我将在~24小时内检查它。谢谢你的帮助。这些声明在词汇上的作用域与函数中声明的所有其他声明一样。用例是什么?@AluanHaddad:我不想编写单独的声明文件,也不想将所有声明和文档放在脚本的顶部,而是想在开始定义相应函数的行的正上方添加这些内容(这样更容易维护IMO)。由于我的脚本返回的是一个creator函数,其中包含所有封装的功能,因此我必须在该creator函数中编写声明。我明白您的意思,但如果这很重要,您的文件可能太长,需要拆分以便于维护。@AluanHaddad:您可能是对的,但我认为我所描述的问题可能有一个解决办法。请你把你的回答变成一个简短的回答,这样我就可以把这个问题标记为完成了?如果没有其他人神奇地提供任何解决方案,我将在~24小时内检查它。谢谢你的帮助。