【发布时间】:2020-03-02 08:24:04
【问题描述】:
我有以下功能(playground):
function myf(): Record<string, string> {
return {
prop1: "a",
prop2: "b"
}
}
函数是纯函数,只返回字典值。我需要从函数的返回类型中提取的类型定义,即{prop1: string, prop2: string}。
当我使用
type MyType = ReturnType<typeof myf>;
它给了我通用的{[key: string]: string} 类型,这是正确的,但不是我想要实现的:
当我使用没有返回类型的函数时,如下所示 (playground):
function myf() {
return {
prop1: "a",
prop2: "b"
}
}
然后它会产生有效的结果:
但是,在这种情况下,我的返回值没有类型检查。
是否可以在返回值中进行类型检查并以某种方式在该函数之外推断返回类型? IE。我想要类似下面的东西(但 myvar 有智能感知)
【问题讨论】:
-
我不太明白第二种情况的问题是什么。将
{prop1: string; prop2: string}作为返回类型可以解决问题吗? -
当然会解决问题,但我不想引入单独的返回类型,因为我有一种感觉,我可以使用 TypeScript 类型系统以某种方式推断该类型。可能我可能有很多类似的函数,都返回不同的对象,返回对象在开发期间会发生变化,因此我不想每次在返回对象上添加\删除\更改属性时都修复返回类型定义。相反,我希望自动推断返回类型。
-
IMO,如果您不想引入单独的返回类型,请不要编写返回类型,让 typescript 推断它
-
然后我失去了返回值的类型检查,正如我在问题中描述的那样:)。
-
但是你想在你的函数中检查什么?
标签: typescript