我有一个接受通用对象的简单函数。返回类型应与该对象相同,但与as const
断言的工作方式类似,缩小范围。
例如。以下内容的返回类型应为{ a: "first"; b: "second" }
and not { a: string; b: string }
:
myFn({ a: "first", b: "second" });
有没有一种机制我们可以指示类型检查器的返回类型myFn
是它的第一个参数类型,缩小?
我有一个接受通用对象的简单函数。返回类型应与该对象相同,但与as const
断言的工作方式类似,缩小范围。
例如。以下内容的返回类型应为{ a: "first"; b: "second" }
and not { a: string; b: string }
:
myFn({ a: "first", b: "second" });
有没有一种机制我们可以指示类型检查器的返回类型myFn
是它的第一个参数类型,缩小?
返回类型应该与该对象相同,但缩小类似于 const 断言的工作方式。
您可以通过将类型作为类型参数传递给函数来实现此目的。
function myFn<T>(args): T {
// do stuff
return null;
}
const a = myFn<{ a: "first"; b: "second" }>(args);
type MyObj = { a: "first", b: "second" }
const a = myFn<MyObj>(args);
不幸的是,对象需要在编译时完全定义,因为类型在运行时不可用。
旧答案(误解)
如果您希望返回类型与参数类型相同。然后您可以使用泛型类型参数。
function MyFunction<T>(argument1: T, anotherArg: number): T {
// do stuff
}
// result will be of type User
const result = MyFunction<User>(user, 9);
在某些情况下,您可以这样做。
// user must be defined as type User above somewhere
const result = MyFunction(user, 9);