打字稿中Object.assign的正确签名是什么?我们已经实现了类似jquery的#extend函数(类似于Object.assign).不幸的是,编译器无法识别扩展对象.
function extend(dst : Object, ...src : Object[]) : T { //... } const data = extend({}, {foo: 'foo'}); data.foo //compiler error
U Avalos.. 5
根据https://github.com/Microsoft/TypeScript/blob/master/src/lib/es6.d.ts,这是Object.assign的声明:
assign(target: T, source: U): T & U; assign (target: T, source1: U, source2: V): T & U & V; assign (target: T, source1: U, source2: V, source3: W): T & U & V & W; assign(target: any, ...sources: any[]): any;
所以#extend的实现看起来像这样:
function extend(target: T, source: U): T & U; function extend (target: T, source1: U, source2: V): T & U & V; function extend (target: T, source1: U, source2: V, source3: W): T & U & V & W; function extend(target: any, ...sources: any[]): any { //implementation }
但是,如果存在es6.d.ts,那么这就引出了我们是否应该使用它而不是自定义#extend的问题.
根据https://github.com/Microsoft/TypeScript/blob/master/src/lib/es6.d.ts,这是Object.assign的声明:
assign(target: T, source: U): T & U; assign (target: T, source1: U, source2: V): T & U & V; assign (target: T, source1: U, source2: V, source3: W): T & U & V & W; assign(target: any, ...sources: any[]): any;
所以#extend的实现看起来像这样:
function extend(target: T, source: U): T & U; function extend (target: T, source1: U, source2: V): T & U & V; function extend (target: T, source1: U, source2: V, source3: W): T & U & V & W; function extend(target: any, ...sources: any[]): any { //implementation }
但是,如果存在es6.d.ts,那么这就引出了我们是否应该使用它而不是自定义#extend的问题.