Typescript如何定义对象的通用方法,如Object<;T>;
我想在global.d.ts中为对象类型生成泛型函数 因为我希望这些函数的返回类型与调用者相同,但有一些错误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
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;
}
})
你的用例是什么?扩展
对象
原型。并且不是泛型的,而且非常基本,编译器甚至不允许您在本地修改现有的库文件。可能有解决办法,但我想了解用例。你不能使对象
通用,它已经在没有泛型的情况下定义过一次,这是一成不变的。您可以使用genericthis
参数将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;
}
})