gpt4 book ai didi

typescript - 如何为扩展对象的函数创建 typescript 定义

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:44 33 4
gpt4 key购买 nike

第 3 方库中有扩展对象以向其添加更多功能的函数。例如seamless-immutable

我想为这样的库创建定义文件。我想到了

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>

然后我将能够声明我自己的类型:

interface Type1 {prop1, prop2}
interface Type2 {propOfType1: ImmutableMethods<Type1>}
var immutableType2:Type2 = Immutable(...)

然后我将在所有对象上使用不可变函数。

但问题是 interface ImmutableMethods<T> extends T 行给我一个错误“一个接口(interface)只能扩展一个类或另一个接口(interface)”

有没有办法声明 T 是一个接口(interface),或者有其他方法来获得这种扩展行为?

最佳答案

您可以使用交集类型来实现此行为。为额外的功能定义一个接口(interface),并定义一个类型,即 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 = ...;

ImmutableMethods<T>接口(interface)定义了涉及的功能。 ImmutableExtended<T> type 是我们实际想要用于扩展对象的接口(interface),当然您可以随意命名这些接口(interface)。

关于typescript - 如何为扩展对象的函数创建 typescript 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35571245/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com