1

我有一个接受通用对象的简单函数。返回类型应与该对象相同,但与as const断言的工作方式类似,缩小范围。

例如。以下内容的返回类型应为{ a: "first"; b: "second" }and not { a: string; b: string }

myFn({ a: "first", b: "second" });

有没有一种机制我们可以指示类型检查器的返回类型myFn是它的第一个参数类型,缩小?

4

1 回答 1

1

返回类型应该与该对象相同,但缩小类似于 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);
于 2020-04-13T00:40:49.147 回答