Я создаю простую функцию с именем unique
.
Для этого нужно удалить все дубликаты из массива или строки, чтобы оно имело function overloading
.
Пожалуйста, посмотрите этот пример кода проблемы:
function unique(str: string): string[];
function unique<T>(arr: T[]): T[];
/**
* Create an `array` without duplicates.
*/
function unique<T>(arrOrString: string | T[]): string[] | T[] {
return [...new Set(arrOrString)]; // typescript will yell at me at this line.
}
export default unique;
Однако, если я изменю свой код на if-else, но на самом деле ничего не сделаю, машинопись теперь будет удовлетворена этим:
// same code, but actually compiling.
function unique(str: string): string[];
function unique<T>(arr: T[]): T[];
/**
* Create an `array` without duplicates.
*/
function unique<T>(arrOrString: string | T[]): string[] | T[] {
if (typeof arrOrString === 'string') {
return [...new Set(arrOrString)];
} else {
return [...new Set(arrOrString)];
}
}
export default unique;
Почему это происходит? Нужно ли писать [...new Set(arrOrString)]
дважды, чтобы это работало?