面试题答案
一键面试确保声明合并不冲突及按预期合并的解决方案
- 使用
namespace
(命名空间)或module
(模块,TypeScript旧版本概念,现在和ES6模块融合):在不同模块中,将对GlobalData
的声明放在相同的命名空间或模块下。这样可以确保这些声明属于同一个逻辑单元,合并时不会因为命名空间不一致而冲突。 - 遵循声明合并规则:TypeScript有明确的声明合并规则。例如,接口(
interface
)合并时,同名接口的成员会合并在一起;类(class
)不能与其他声明合并等。确保在不同模块中的声明遵循这些规则,避免违反规则导致意外结果。 - 使用ES6模块导出导入:通过ES6模块系统,在一个模块中定义
GlobalData
的基础声明,其他模块通过导入后进行扩展。这样能清晰地控制声明的来源和扩展方式。
示例代码
假设我们有一个项目,有两个模块module1.ts
和module2.ts
,都要对GlobalData
进行声明合并。
module1.ts
// 定义基础的GlobalData接口
export interface GlobalData {
commonProp: string;
}
module2.ts
import { GlobalData } from './module1';
// 对GlobalData进行声明合并
export interface GlobalData {
additionalProp: number;
}
main.ts
import { GlobalData } from './module1';
import { GlobalData as ExtendedGlobalData } from './module2';
// GlobalData现在包含commonProp和additionalProp
const data: GlobalData = {
commonProp: 'example',
additionalProp: 123
};
在上述代码中,module1.ts
定义了GlobalData
的基本结构,module2.ts
通过导入module1
中的GlobalData
接口,并再次声明同名接口来扩展它。最后在main.ts
中使用合并后的GlobalData
类型,它同时包含了commonProp
和additionalProp
。