typescript trpc中的类型脚本重载未命名函数

jslywgbw  于 2023-01-10  发布在  TypeScript
关注(0)|答案(1)|浏览(118)

我有一个典型的trpc路径。它获取posts。如果有一个id参数,它获取1个post。如果没有,它获取所有post。重载一个未命名函数的语法是什么?在这种情况下,我应该把重载代码放在哪里?

publicProcedure
    .input(z.object({ id: z.string().nullish() }).nullish())
    .query(async ({ input }) => {

      const url = "https://example.com/posts";
      const json = (await got.get(url).json()) as IPosts[];

      if (input && input.id) {
        const posts = json.find(p => p.id === input.id);
        if (posts) return posts;
      }

      return json;
    })

不确定下面的代码是否有效或者语法是否正确,但是希望添加类似下面的代码来重载函数

type IOverload = {
   (id: undefined): IPosts[];
   (id: string): IPost; 
}

// or

function unnamedFn<T extends string | null>(id: T): T extends string ? IPost : IPosts[]
hi3rlvi2

hi3rlvi21#

你的第一个想法很好!

type IPost = {};

type IOverload = {
    (id: undefined): IPost[];
    (id: string): IPost;
}

declare const overloaded: IOverload;

overloaded(undefined)
//^? IPost[]

overloaded('')
//^? IPost

Playground

相关问题