提问人:Ilia Bogov 提问时间:3/1/2023 最后编辑:Ilia Bogov 更新时间:3/2/2023 访问量:233
TypeScript Extend 命名空间
TypeScript Extend namespace
问:
我正在尝试了解如何使用命名空间的扩展。 比方说,我有命名空间
namespace a {
export type x= number
export type foo= () => void
}
我想在另外两个命名空间中使用它,而无需复制粘贴。 类似的东西
namespace b & a{
export type y= number
}
namespace c & a{
export type z= boolean
}
就像在 ts 类型中一样。
命名空间文档中没有任何内容可以回答我的问题。 任何帮助将不胜感激!
我尝试过的事情:
1)
namespace b{
export namespace a {
export type x = number
export type foo= () => void
}
export type y = number
}
这不允许在 C 中重用 A。
2)
namespace b{
export type x = a.x
export type t = a.t
export type y = number
}
这更好,但仍然很糟糕,如果我在 a 中导出了很多类型。
- 尝试使用类型, 它有效,但用途不那么美观
type a = {
x: number,
t: () => void
}
type b = a&{
y: number
}
const i :b.x = 1 // compilation error.
const i :b["x"] = 1 // works but not as beautiful as b.x
答:
0赞
Teneff
3/2/2023
#1
我认为你把 s 和 s 混淆了const
type
如果有意导出 sconst
您可以定义为i
const i = b.x
它将被键入为const i: 1
否则
您可以导出类型
namespace a {
export type x = 1;
export type t = () => { }
}
namespace b {
export type x = a.x
export type t = a.t
export type y = 2
}
const i: b.x = 1 // here you can use it to type variable
或
您可以将b.x
typeof a.x
namespace b {
export type x = typeof a.x
export type t = typeof a.t
export type y = 2
}
const i: b.x = 1 // and once again you'll be able to type `i`
评论