第三方库中有功能扩展对象以向其添加更多功能.例如,无缝不可变的
我想为这样的库创建定义文件.我想到了一些东西
interface ImmutableMethods<T> extends T{
set?<U>(key: string | number, value: any): T | U;
setIn?<U>(keys: Array<string>, value: any): T | U;
...
}
function Immutable<T>(obj: T, options?): ImmutableMethods<T>
Run Code Online (Sandbox Code Playgroud)
然后我将能够声明我自己的类型:
interface Type1 {prop1, prop2}
interface Type2 {propOfType1: ImmutableMethods<Type1>}
var immutableType2:Type2 = Immutable(...)
Run Code Online (Sandbox Code Playgroud)
然后我将在所有对象上使用Immutable函数.
但问题是该行interface ImmutableMethods<T> extends T给了我一个错误"一个接口可能只扩展一个类或另一个接口"
有没有办法声明T是一个接口,还是一种其他方式来获得这种扩展行为?
您可以使用交叉类型来实现此行为。为额外的函数定义一个接口,并定义一个类型 T & Interface。我对你的代码的修改:
interface ImmutableMethods<T> {
set?<U>(key: string | number, value: any): T | U;
setIn?<U>(keys: Array<string>, value: any): T | U;
}
type ImmutableExtended<T> = ImmutableMethods<T> & T;
interface Type1 { prop1: string, prop2: string }
interface Type2 { propOfType1: ImmutableExtended<Type1> }
var immutableType2: Type2 = ...;
Run Code Online (Sandbox Code Playgroud)
接口ImmutableMethods<T>定义了所涉及的功能。类型ImmutableExtended<T>是我们实际想要用于扩展对象的接口,当然您可以随意命名这些接口。
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |