【发布时间】:2019-12-21 11:14:22
【问题描述】:
这很难在标题中描述属性,所以这里是一个例子:我有一个函数应该返回一个包含两个项目的数组:
const calc = () => Math.random();
const myFunc = () => ([calc(), 'string']);
这样数组中的第一项总是calc函数的返回类型,第二项总是一个字符串。
当我运行这个时,myFunc 推断的类型变为(number | string)[]:
相反,我希望类型为[number, string],这样我就可以像这样解构:
const [calcResult, str] = myFunc();
...这两项都会正确输入。
通常,我会明确地给 myFunc 一个返回类型:
const myFunc = (): [number, string] => ([calc(), 'string']);
然后我得到我想要的:
棘手的部分是我不能只将硬编码的返回类型添加到myFunc,因为在我的真实代码中calc() 返回的类型非常复杂(当我使用IDE 的推理显示功能)并且可以随时间轻松更改。所以我想让它继续被推断,同时保持返回类型的固定结构与我返回的确切数组匹配,这样我就可以对它使用解构。
我怎样才能做到这一点?
谢谢!
【问题讨论】:
标签: typescript types typescript-generics union-types