我正在尝试使用 TS 实现以下目标:
let m: Extendable
m.add('one', 1)
// m now has '.one' field
m.add('two', 2)
// 'm' now has '.one' and '.two' fields
Run Code Online (Sandbox Code Playgroud)
我熟悉通过以下方式在 TS 中返回扩展类型:
function extend<T, V>(obj: T, val: V): T & {extra: V} {
return {
...obj,
extra: val
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的情况下有两个问题:
1) 对象m在add()被调用后需要更新其类型以反映新字段的添加
2)新字段的名称被参数化(并不总是extra例如)
第一个问题可能会通过使用类定义并以某种方式使用TypeThis实用程序来重新调整类型来解决,但我无法找到足够的关于如何使用它的文档。
欢迎任何帮助或指导。谢谢!