Typescript如何定义对象的通用方法,如Object<;T>;

Typescript如何定义对象的通用方法,如Object<;T>;,typescript,Typescript,我想在global.d.ts中为对象类型生成泛型函数 因为我希望这些函数的返回类型与调用者相同,但有一些错误 global.d.ts declare global { //declare extension methods for Array<T> interface Array<T> { addBy( item:any ): T[]; GetRandom() : T; CloneItems() :

我想在global.d.ts中为对象类型生成泛型函数

因为我希望这些函数的返回类型与调用者相同,但有一些错误

global.d.ts

declare global
{
    //declare extension methods for Array<T>
    interface Array<T>
    {
        addBy( item:any ): T[];
        GetRandom() : T;
        CloneItems() : T[];
        concatAll( items:T[] ) : T[]
    }
    
    // Error TS2428: All declarations of 'Object' must have identical type parameters.
    interface Object<T>
    {
        CloneFromLevelBy( str:Str ): T
    }
}
真正的CloneFromLevelBy函数通过Object.defineProperty到Object.prototype实现

Object.defineProperty( Object.prototype, 'CloneFromLevelBy', 
{ value:
    function( levelDesc )
    {
        let clone = {};
        /* code... */
        return clone;
    }
})

你的用例是什么?扩展
对象
原型。并且不是泛型的,而且非常基本,编译器甚至不允许您在本地修改现有的库文件。可能有解决办法,但我想了解用例。你不能使
对象
通用,它已经在没有泛型的情况下定义过一次,这是一成不变的。您可以使用generic
this
参数将
CloneFromLevelBy
设置为generic,但我必须先看一个更连贯的用法示例,然后才能建议添加更多信息,谢谢,也许您需要
CloneFromLevelBy(this:T,k:k):T[k]
(使用@TitianCernicova Dragomir说的generic)但是你不能仅仅使用一个独立的函数,而不是将
cloneFromLevelBy
添加到每个对象的原型中吗?我的意思是,这是你自己设计的,还是只是想描述一些你正在使用的库已经完成的原型?如果是前者,我建议改变设计。@jcalz这是我自己的方法。它只返回一个只需要所需属性的对象,因此下面的JSON.stringify可以减少消息的大小。
Object.defineProperty( Object.prototype, 'CloneFromLevelBy', 
{ value:
    function( levelDesc )
    {
        let clone = {};
        /* code... */
        return clone;
    }
})