我想让这两个功能通用化:
/**
* Unpack an element if it is packed.
* @param data - Data from which to unpack.
*/
export const unpack = (
data: undefined | string | string[],
index: number = 0,
): undefined | string => (Array.isArray(data) ? data[index] : data);
/**
* Pack an element if it is unpacked.
* @param data - Data to pack.
*/
export const pack = (
data: undefined | string | string[],
): undefined | string[] =>
Array.isArray(data) || data === undefined ? data : [data];
这是我的try :
/**
* Unpack an element if it is packed.
* @param data - Data from which to unpack.
*/
export const unpack = <T,>(
data: T,
index: number = 0,
): T extends unknown[] ? T[number] : T =>
Array.isArray(data) ? data[index] : data;
/**
* Pack an element if it is unpacked.
* @param data - Data to pack.
*/
export const pack = <T,>(data: T): T extends unknown[] | undefined ? T : T[] =>
Array.isArray(data) || data === undefined ? data : [data];
对于通用unpack
函数,TypScript没有抱怨.然而,对于通用pack
函数,TypScript会生成此错误:
Type 'T | (T & ({} | null))[]' is not assignable to type 'T extends unknown[] | undefined ? T : T[]'.
Type 'T' is not assignable to type 'T extends unknown[] | undefined ? T : T[]'.
通用unpack
函数是否正确输入?如何修复通用pack
函数的类型?