首页 > 解决方案 > typescript - 将类型传递给函数参数

问题描述

我还是打字稿的新手,但我正在尝试将自定义类型传递给函数。在这种情况下,我避免使用“任何”,这是我的示例。

interface ReturnObj<T> {
  returnObj: T | null
}

const createResultObj = (
    isSuccessful: boolean = false,
    returnObj: ReturnObj = null,
    errors: AppError | null = null,
    statusCode: number = 500
   ): Result => {
return {
       isSuccessful,
       returnObj,
       errors,
       statusCode
     }
}

当然,这会返回一个错误,Generic type 'ReturnObj<T>' requires 1 type argument(s).但我不确定如何填写这部分,以便我可以调用此函数并在 returnObj 中存在某些内容时包含类型。

标签: typescripttypescript-typingstypescript-generics

解决方案


您所需要做的就是为您的函数提供一个通用参数,如下所示:

interface ReturnObj<T> {
  returnObj: T | null
}

type AppError = {} | null
type Result<T extends unknown> = {
  isSuccessful: boolean,
  returnObj: ReturnObj<T> | null,
  errors: AppError,
  statusCode: number
}

const createResultObj = <T extends unknown>(
  isSuccessful: boolean = false,
  returnObj: ReturnObj<T> | null = null,
  errors: AppError = null,
  statusCode: number = 500
): Result<T> => {
  return {
    isSuccessful,
    returnObj,
    errors,
    statusCode
  }
}

type sth = { foo: string };
const s: sth = { foo: "bar" }
const returnS: ReturnObj<sth> = { returnObj: s }
const re = createResultObj(true, returnS, null, 200);
console.log(re);

游乐场链接

注意:<T extends unknown>由于箭头功能的使用,这是一项义务,请参阅


推荐阅读