在谷歌闭包编译器中,您可以通过执行typeof或instanceof来优化通用。 例如,在这里我采用泛型并将其视为对象:
/**
* @param {T} obj
* @return {T}
* @template T
*/
function cloneIfObject(obj) {
if (typeof obj === 'object') {
return objectClone(obj);
}
return obj;
}
/**
* Stub function that only accepts object type
*
* @param {!Object} obj
* @return {!Object}
*/
function objectClone(obj) {
return obj; //Pretend to clone
}
我尝试在打字稿中实现这一点,但我不能像对象那样对待它。
function cloneIfObject<T>(obj: T) {
if (typeof obj === 'object') {
return { ...obj }; //Error: Spread types may only be created from object types.
}
if (obj instanceof Object) {
return { ...obj }; //Error: Spread types may only be created from object types.
}
return obj;
}