我正在尝试使用TypeScript实现以下目标:
let m: Extendable
m.add('one', 1)
// m now has '.one' field
m.add('two', 2)
// 'm' now has '.one' and '.two' fields
我熟悉通过以下方式在TS中返回扩展类型:
function extend<T, V>(obj: T, val: V): T & {extra: V} {
return {
...obj,
extra: val
}
}
现在,我的情况有两个问题:
1)对象m
在调用add()
后需要更新其类型以反映添加新字段的情况。
2)新字段的名称是参数化的(不总是extra
,例如)。
第一个问题可以通过使用类定义并以某种方式使用TypeThis
实用程序重新调整类型来解决,但我找不到足够的文档说明如何使用它。
欢迎任何帮助或指导。谢谢!
add()
的第一个参数是字面量,而不是变量。 - Dragan Okanoviclet e = new Extendable()
是行不通的,但是let e: Extendable = new Extendable()
是行得通的),因此我不确定是否值得这样做。 - jcalz