正在为命名空间typescript赋值



我想用这样的点表示法为名称空间赋值:

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 ?? {})

相关内容

  • 没有找到相关文章

最新更新