我收到TypeScript错误
在代码中使用以下内容时
错误:
类型“string”不能分配给类型“T extends string?”string:string[]'。类型“string[]”不能分配给类型“T extends string?”string:string[]'。
我想让函数的返回类型使用泛型推断,如何实现呢?
console.clear()
function sayHello<T extends string | string[]>(name: T): T extends string ? string : string[] {
if (typeof name === 'string') {
return `Hi, ${name}!`;
} else if (Array.isArray(name)) {
return name.map(name => `Hi, ${name}!`);
}
throw new Error('Invalid value');
}
sayHello('xx')
sayHello(['aa', 'bb'])
错误:
https://www.typescriptlang.org/play?#code/FAYw9gdgzmA2CmA6ECCGAnAFASmAMwFcIQAXAS0gAIpUBPACXlljAB4AVS+ADxPggAmUaiXRkIAc0oAfEWMkBtALoA+TBFQBbeAC5K7bHs48+g4VFHipAfjlXKei-InLKAb2CUvlMnkqYSWgAHeDA-DW1KAF4YygByJys47HdPb3T0eBICdAhKAAN6MgAaSgASNwj4AF8AQnyAbjSvaq5YKHgfP0wAQXR0OkQyKD6B2nUteGwUj3SMrJy8qsRNVCCJyKiVAqLSiqq6-Owm9OrmyhIAC3QwAHdKCHh7gFF+sCw4gEkIADdUWDIAkof1gBHgySaZ2AwBoDCYLEwcW43GSlAA9Gjgf9ATC6IxmGBMAo4qhUHFSnEAEaUuJKFIYrEAgTQoA
2条答案
按热度按时间bjg7j2ky1#
我不认为有一个完美的方法可以让编译器不抱怨这一点。或者,您可以使用函数重载。
Playground
flseospp2#
这是当前Typescript的一个局限性。
您可以在这里了解更多:https://github.com/microsoft/TypeScript/issues/33912