typescript:如何使用原始名称导入

typescript:如何使用原始名称导入,typescript,typescript2.0,Typescript,Typescript2.0,假设我有一个模块 module A { export function X () { … } } 我想在另一个模块中使用: // Import fails with "Cannot find module 'A'." even with // A.ts being in same directory import * as A from "A"; module B { function Y () { // Module

假设我有一个模块

module A 
{
    export function X ()
    {
        …
    }
}
我想在另一个模块中使用:

// Import fails with "Cannot find module 'A'." even with
// A.ts being in same directory
import * as A from "A";

module B
{
    function Y ()
    {
        // Module and function name carry information
        // which I want to keep for readability.
        A.X ();
    }
}
这应该是最简单的出口和进口的情况,但我就是不能让它工作

更新:

正如我所说:模块名带有值。在多个模块(或名称空间)中使用类似的命名函数将会发生。i、 E

module C 
{
    export function X ()
    {
        …
    }
}
我当然不想给函数命名
A.A_X
C.C_X
——重复命名让我畏缩

使用模块 不要使用关键字
模块
。它已被重命名为,因此创建模块没有用处

// A.ts
export function X()
{
    …
}

// B.ts
import * as A from "./A";
function Y ()
{
    A.X ();
}
模块是一个JavaScript(或TypeScript)文件,在根级别具有
导入
导出

模块中的TS命名空间 如果要从模块中导出
命名空间
,以下是一个示例:

// A.ts
export namespace A {
    export function X ()
    {
        …
    }
}

// B.ts
import {A} from "./A";
function Y () {
    A.X ();
}
在文件
A.ts
中,注意两个导出。在根级别,它是标准的模块导出。在名称空间中,
导出函数X
是TypeScript的非标准特性,用于在名称空间中声明公共内容

另外,请注意文件
B.ts
中import的语法更改

您可以从Mozilla中阅读模块语法的演示文稿。

使用模块 不要使用关键字
模块
。它已被重命名为,因此创建模块没有用处

// A.ts
export function X()
{
    …
}

// B.ts
import * as A from "./A";
function Y ()
{
    A.X ();
}
模块是一个JavaScript(或TypeScript)文件,在根级别具有
导入
导出

模块中的TS命名空间 如果要从模块中导出
命名空间
,以下是一个示例:

// A.ts
export namespace A {
    export function X ()
    {
        …
    }
}

// B.ts
import {A} from "./A";
function Y () {
    A.X ();
}
在文件
A.ts
中,注意两个导出。在根级别,它是标准的模块导出。在名称空间中,
导出函数X
是TypeScript的非标准特性,用于在名称空间中声明公共内容

另外,请注意文件
B.ts
中import的语法更改


您可以从Mozilla中阅读模块语法的演示。

如果我没有按照您的建议使用
名称空间
,那么javascript端将生成一个名为
function X()
的函数。当然,我希望生成的javascript函数也被称为
函数A.X()
。(否则,我很快就会遇到几个相互冲突的init()和onXXXClick函数),这是我使用
名称空间A
时的情况。然而,我得到了一个错误“error TS2306:File'../A.ts'不是一个模块。”这看起来很复杂。@Martin当前生成的JavaScript并不重要。几年后,生成的JS将具有
export
import
关键字以及您命名的
a
import。但我会编辑以在您的模块中添加名称空间。如果我没有按照您的建议使用
名称空间
,那么在javascript端会生成一个名为
function X()
的函数。当然,我希望生成的javascript函数也被称为
函数A.X()
。(否则,我很快就会遇到几个相互冲突的init()和onXXXClick函数),这是我使用
名称空间A
时的情况。然而,我得到了一个错误“error TS2306:File'../A.ts'不是一个模块。”这看起来很复杂。@Martin当前生成的JavaScript并不重要。几年后,生成的JS将具有
export
import
关键字以及您命名的
a
import。但我将编辑以在模块中添加名称空间。模块名称是文件的名称。使用通配符导入的示例说明了为什么多个文件中的同一函数名不必导致冲突。即使您在两个不同的位置使用相同的文件名和相同的函数,也可以使用具有不同名称的通配符(例如
import*作为from“/A”)导入这两个文件名;从“./A”导入*作为其他A
或者您可以使用
作为
从“/A”导入{func as func1}一样导入函数本身;从“/B”
导入{func as func2}模块名是文件名。使用通配符导入的示例说明了为什么多个文件中的同一函数名不必导致冲突。即使您在两个不同的位置使用相同的文件名和相同的函数,也可以使用具有不同名称的通配符(例如
import*作为from“/A”)导入这两个文件名;从“./A”导入*作为其他A
或者您可以使用
作为
从“/A”导入{func as func1}一样导入函数本身;从“/B”导入{func as func2}