如何在Typescript .d.ts文件中模块化namepace

时间:2018-10-15 03:32:52

标签: typescript

我有一个index.d.ts。主名称空间包括两个名称相同的名称空间和接口。例如:

// index.d.ts
export = API
export as namespace API

declare namespace API {
  export const val1: any
  export func1(): void

  export namespace Query {}
  export interface Query {}

  export namespace Mutation {}
  export interface Mutation {}
}

此示例代码运行良好。我想将该文件模块化。尽管我尝试了很多方法,但还是失败了。例如,

// index.d.ts
import { Query } from './query.d.ts'
import { Mutation } from './mutation.d.ts'
export = API
export as namespace API

declare namespace API {
  export const val1: any
  export func1(): void

  // pseudocode
  export Query
  export Mutation
}

// query.d.ts
export namespace Query {}
export interface Query {}

// mutation.d.
export namespace Mutation {}
export interface Mutation {}

请帮助我T ^ T

1 个答案:

答案 0 :(得分:0)

index.d.ts应该是:

import { Query as Query1 } from './query'
import { Mutation as Mutation1 } from './mutation'
export = API
export as namespace API

declare namespace API {
  export const val1: any
  export function func1(): void

  export import Query = Query1;
  export import Mutation = Mutation1;
}

您使用import X = Y语法为现有符号定义别名(带有其所有含义:值,类型和/或名称空间),然后从namespace API导出别名。棘手的部分是,您必须最初以替代名称(在我的示例QueryMutation下导入Query1Mutation1,以便可以使用所需名称定义别名。 QueryMutation,而不会遮挡外面的QueryMutation。 (export import Query = Query是一个循环定义;无法显式引用外部范围。)