提问人:Isti115 提问时间:6/29/2023 最后编辑:Isti115 更新时间:6/29/2023 访问量:61
扩展和重新导出导入的 TypeScript 命名空间
Extending and reexporting an imported TypeScript namespace
问:
在我们的一个项目中,我们正在导入一个包,该包导出了一堆颜色值,我们希望扩展和重新导出这些值。到目前为止,这已经是用普通的旧 JS 对象完成的:
theme-library/colors.js
:
export const Colors = {
error: '#f00',
info: '#00f',
success: '#0f0',
axes: {
x: '#f44',
y: '#4f4',
z: '#06f',
},
};
app/colors.js
:
import { Colors as BaseColors } from 'theme-library/colors';
export const Colors = {
...BaseColors,
done: '#0f8',
selected: '#fc0',
};
现在我们正在过渡到 TypeScript,我们认为将它们转换为命名空间是正确的选择,如下所示,它在库中工作:
theme-library/colors.ts
:
export namespace Colors {
export const error = '#f00';
export const info = '#00f';
export const success = '#0f0';
export const axes = {
x: '#f44',
y: '#4f4',
z: '#06f',
} as const;
}
但是,我们不知道在应用程序源代码中扩展这些值的正确方法是什么。传播是无效的,我似乎无法弄清楚是否有其他可行的方法可以将一个命名空间的所有成员包含在另一个命名空间中。由于我不介意扩展原始命名空间而不是创建一个新命名空间,因此我也考虑过合并命名空间,只需使用其原始名称导入并创建另一个具有相同名称的命名空间,但它似乎不起作用。(Colors
"Import declaration conflicts with local declaration of 'Colors'.
)
app/colors.ts
:
import { Colors as BaseColors } from 'theme-library/colors';
export namespace Colors {
// None of these work:
// ...BaseColors;
// export * from BaseColors;
// export { Colors } from 'theme-library/colors';
export const done = '#0f8';
export const selected = '#fc0';
};
我试过四处阅读,据我所知,这似乎是不可能的,但请告诉我我的结论是否错误!如果这确实不可行,那么我会对我们可以采取的替代方法感兴趣!
答:
0赞
Dimava
6/29/2023
#1
您可以用作命名空间:export
// a.ts
export const red = '#f00'
export const blue = '#00f'
// b.ts
export * from './a.ts'
export const blurple = '#40f'
// c.ts
export * as Colors from './b.ts'
// use.ts
import * as Colors1 from './b.ts'
import {Colors} from './c.ts'
评论
Colors
export const Colors = { ... } as const
as const
{...} satisfies ColorsType