【发布时间】:2019-02-27 09:51:52
【问题描述】:
正在尝试:
/**
* Deep clones an array of instances of type T and returns a new array.
* @param array The array to deep clone
* @return A new deep clone of the array argument
*
* @example
<pre>
const original = [new Todo(), new Todo()];
const result = [new Todo(), new Todo()];
expect(deepClone(original)).to.eql(result);
</pre>
*/
export function deepClone<T extends Object>(array: T[]): T[] {
return array.map((e:T) => ({...e}));
}
打字稿说:
[ts] 传播类型只能从对象类型创建。
不应该T extends Object 处理这个吗?
【问题讨论】:
-
不幸的是,您必须使用类型断言。
array.map((e:T) => (<object>{...e}));这很丑,但如果你知道自己在做什么,它就可以工作。仅供参考,您在约束中使用了错误的类型。应该是object -
我试过了,但现在显示
Type 'object' is not assignable to type 'T'. -
@AluanHaddad 天气越来越暖和了,但现在它说:
[ts] Type 'object' cannot be converted to type 'T'. -
所以在两者之间添加
<unknown>:array.map((e) => <T>(<unknown><object>{...e}));
标签: javascript arrays typescript