【发布时间】:2020-06-03 15:52:58
【问题描述】:
如何根据传递的参数数量创建带有具有不同返回类型的其余参数的箭头函数?
例如我想要一个具有以下返回类型的safeId():
safeId() // () => string
safeId('foo') // (obj: any) => string
safeId('foo', 4, {}, ['hi']) // (...obj: any[]) => string[]
// Currently my return type isn't specific:
const safeId = (...objects: any[]) => string | string[] => {
// Simplified
if (objects.length > 1) return sanitizedObjectIds(objects) // string[]
return 'id'
}
【问题讨论】:
-
你的意思是像overloading?我没有仔细阅读它,但请检查this article是否可以帮助您。
-
我尝试过重载,但遗憾的是你不能用不同数量的参数重载:tutorialsteacher.com/typescript/function-overloading“参数的数量应该相同”
-
这不是真的,或者至少没有很好的解释。你可以在函数声明中使用不同数量的参数,你只需要关心函数实现中的所有情况。
-
我尝试了以下变体:``` type SafeId = { (): string; (对象:任何):字符串; (...objects: any[]): string[]; } const safeId: SafeId = (...objects: any[]) => { } ``` 但是运气不好 - 你能告诉我你是怎么做的吗@StéphaneVeyret?
-
我已经在下面的答案中做到了。我不知道它是否可以用箭头功能完成。给我几分钟,让我重新修改它……
标签: typescript typescript-generics