我想用这样的点表示法为名称空间赋值:
namespace item {}
item.item1 = {
name: "Some Item"
}
item.item2 = {
name: "Some Item"
}
此错误为:Property 'item1' does not exist on type 'typeof item'.
现在这个工作:
namespace item {
export const item3 = {
name: "Some Item"
}
}
namespace item {
export const item4 = {
name: "Some Item"
}
}
但它太冗长和丑陋了,我宁愿不使用它。在命名空间声明中有什么我可以做的吗,可以让第一个版本正常工作?这样的事情对我来说很有意义:
namespace item {
[key: string]: ItemType
}
我的一些目标:
- 希望能够使用intellisense在CCD_ 2上自动完成,应显示项目1、项目2等
- 将项目设置在不同的文件中,而不是全部设置在同一个括号中
命名空间不具有可变键。
如果您想定义名称空间并稍后分配,请使用
namespace A {
export declare let n: number;
}
A.n = 123;
如果你想导出多个项目,请执行
namespace A {
export const item1: ItemType = {name: '123'};
export const item2: ItemType = {name: '123'};
}
如果您想要一个属性未知的对象,请使用
let A: Record<string, ItemType> = {}
A.whatever = {name: '123'}
// or Partial<Record<'a'|'b', ItemType>>
let B: {[K in 'a'|'b']:?: ItemType} = {}
B.a = {name: '123'}
名称空间本身就是语法糖意
A = ((A) => {
A.item1 = {name: 123};
A.item2 = {name: 123};
return A;
})(A ?? {})