Compiler construction 在Typescript中,为什么可以';内部模块参考是否为外部模块?

Compiler construction 在Typescript中,为什么可以';内部模块参考是否为外部模块?,compiler-construction,typescript,Compiler Construction,Typescript,出于好奇,我想知道:为什么Typescript中的编译器不允许这样的事情?是否存在安全隐患?它会引起语法问题吗 export import Bar = require('./Path/To/Bar'); // this is allowed module Foo { export import Bar = require('./Path/To/Bar'); // this is not allowed } 目前,这会导致以下错误: Import declarations in an

出于好奇,我想知道:为什么Typescript中的编译器不允许这样的事情?是否存在安全隐患?它会引起语法问题吗

export import Bar = require('./Path/To/Bar'); // this is allowed

module Foo {
    export import Bar = require('./Path/To/Bar'); // this is not allowed
}
目前,这会导致以下错误:

Import declarations in an internal module cannot reference an external module.

。原则上,编译器可以通过检查RHS来区分外部模块导入和内部模块导入,但实际上,绝大多数外部模块导入都希望处于顶层,然后我们必须从可见性的角度来理解当模块不导出其导入时意味着什么(对于AMD来说,这一点还不清楚)原则上,编译器可以通过检查RHS来区分外部模块导入和内部模块导入,但实际上,绝大多数外部模块导入都希望处于顶层,然后我们必须从可见性的角度来理解当模块不导出其im时这意味着什么端口(对于AMD来说,这甚至不清楚是否有任何意义)。

那么这怎么办?我们如何导入以仅获得类型安全性?例如,我想这样做:声明导入IFoo=require(“app/foo”);var foo:IFoo;我正在寻找一种方法,当app/foo导出一个类而不将app/foo添加到define方法时,可以声明与app/foo类型相同的foo。class foo{};export=foo;那么如何做到这一点呢?我们如何导入以仅获得类型安全性?例如,我想这样做:declare import IFoo=require(“app/foo”);var foo:IFoo;我正在寻找一种方法,当app/foo导出一个类而不向define方法添加app/foo时,可以声明与app/foo类型相同的foo;