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];
        }
    }

    return objectCopy;
}

但这会给出编译器警告:“索引签名参数类型必须是‘字符串’或‘数字’”。

也许可以将键类型限制为数字或字符串?或者只是用两种类型作为键重载它?

最佳答案

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

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

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

    return objectCopy;
}

和用法:

// usage: 
var foo = {
    bar: 123
};

var baz = copyObject(foo);
baz.bar = 456;

关于generics - 你能用 typescript 写一个通用的复制对象函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22247799/

相关文章:

javascript - 什么是 .d.ts 文件以及为什么需要它

javascript - 根据条件添加 Prop 以 react 组件?

reactjs - "No valid rules have been specified for JavaScript files"是什么意思?

c# - 如何解决泛型错误 CS0311?

java - Hibernate 类与列表的强制转换异常

c# - 如何枚举实现通用接口(interface)的所有项?

javascript - 如何访问 Angular 4 服务中的 DOM 元素?

java - AssertJ `containsExactly` 带有通配符的断言列表

c# - 从通用数组返回引用

html - 使用 Typescript 隐藏元素