Generics 你能用typescript写一个通用的复制对象函数吗?

Generics 你能用typescript写一个通用的复制对象函数吗?,generics,typescript,Generics,Typescript,到目前为止,我已经尝试: function copyObject<K, V> (object: { [k: K]: V; }) { var objectCopy = {}; for (var key in object) { if (object.hasOwnProperty(key)) { objectCopy[key] = object[key]; } } retu

到目前为止,我已经尝试:

function copyObject<K, V> (object: { [k: K]: V; }) {
    var objectCopy = {};

    for (var key in object)
    {
        if (object.hasOwnProperty(key))
        {
            objectCopy[key] = object[key];
        }
    }

    return objectCopy;
}
函数copyObject(对象:{[k:k]:V;}){
var objectCopy={};
for(对象中的变量键)
{
if(object.hasOwnProperty(key))
{
objectCopy[key]=对象[key];
}
}
返回目标副本;
}
但这给了编译器一个警告:“索引签名参数类型必须是‘string’或‘number’”


也许可以将键类型约束为数字或字符串?或者用这两种类型作为键重载它?

您可以简单地执行以下操作:

function copyObject<T> (object:T): T {
    var objectCopy = <T>{};

    for (var key in object)
    {
        if (object.hasOwnProperty(key))
        {
            objectCopy[key] = object[key];
        }
    }

    return objectCopy;
}

Typescript没有TypeClass,我也不知道有任何接口只满足字符串和数字类型,因此重载似乎是唯一的选择:

export function copyObject<V> (object: { [s: string]: V; }) : { [s: string]: V; }
export function copyObject<V> (object: { [n: number]: V; }): { [n: number]: V; }
export function copyObject (object: {}): {}
export function copyObject (object: {}) {
    var objectCopy = <any>{};

    for (var key in object)
    {
        if (object.hasOwnProperty(key))
        {
            objectCopy[key] = (<any>object)[key];
        }
    }

    return objectCopy;
}
导出函数copyObject(对象:{[s:string]:V;}):{[s:string]:V;}
导出函数copyObject(对象:{[n:number]:V;}):{[n:number]:V;}
导出函数copyObject(对象:{}):{}
导出函数copyObject(对象:{}){
var objectCopy={};
for(对象中的变量键)
{
if(object.hasOwnProperty(key))
{
objectCopy[key]=(object)[key];
}
}
返回目标副本;
}

(字符串和数字重载允许您复制具有同质类型的对象)

但这看起来不像是将类型t限制为“object”类型,这意味着您即使复制了类型错误,也不会得到类型错误,例如:copyObject(5)。我在上面的评论中添加的过载解决方案确实在这种情况下给了您一个警告,因此看起来更好。
export function copyObject<V> (object: { [s: string]: V; }) : { [s: string]: V; }
export function copyObject<V> (object: { [n: number]: V; }): { [n: number]: V; }
export function copyObject (object: {}): {}
export function copyObject (object: {}) {
    var objectCopy = <any>{};

    for (var key in object)
    {
        if (object.hasOwnProperty(key))
        {
            objectCopy[key] = (<any>object)[key];
        }
    }

    return objectCopy;
}