求助,请教一个 Typescript 类型写法问题

usedtobe 1月前 23

ts 小白,初次学习 ts,想实现一个函数,传入一个字符串数组,返回一个以这个数组里的元素作为 key 的对象

function fn (array: string[]): ReturnType {}

比如传入 ['a', 'b', 'c'],会返回 {'a': 1, 'b': 2, 'c': 3}

现在卡在了这个 ReturnType 类型要怎么写上面。。。

一种思路是

interface ReturnType { [key: string]: number }

但是这样提示不够精确,想让 ts 能够提示出返回值包含 a,b,c 三个属性,大家有什么思路吗

最新回复 (7)
  • cuvii 1月前
    引用 2
    interface IType {
    a: number;
    b: number;
    c: number;
    }

    这样?
  • codehz 1月前
    引用 3
    declare function fn<T extends string>(input: T[]): Record<T, number>;

    const ret = fn(['a', 'b']);
    ret.a = 1;
    ret.b = 2;
    ret.c = 3; // error: Property 'c' does not exist on type 'Record<"a" | "b", number>'.
  • cuvii 1月前
    引用 4
    @codehz 应该是你这样...我没看入参...
  • noe132 1月前
    引用 5
    https://www.typescriptlang.org/play?target=99#code/C4TwDgpgBAggTnAKgewEoQMbLgEwDyJQQAewEAdjgM5RwQCGOy5ANiFFcHAJbkDmAbQC6AGiioipCtXGZs+Tj35jyAVwC2AIwhwAfFAC8UAN4BffUcIkylGgIB0j3gDMdUAIpiXbgOpCAUFBBUAD8UD6SNjKKvHxQgcGJYe6R0jQx-MIJiTmhJlACANZQvOFCAFweAgDkLBR8wAAW1UJQplAAZLAIKOhYuHjuutm5wZWoI4njI9P+oJBQAGIs9MA2AKrk3MwEFiYjRSXkUIUQIMjOUIgVV0UBpv7+WOScUM8AbjrAhlAEqbYcLixYS6AAU9AQlUQAEpDPpjCNnq9kJoAFaVVTkQrkZAAd2ORgA8mjMMB7M44Mh1ABRchAiBUcEIezqehgUGg95eWEGfQCLklITQ6EjOjAVRwY4o1FQeg0ZarDZbHbwJBoOQDRC6YYPJ7MV50KiqFjfIwfL6gmr0apiaqaG1QaoYFqyuzVa22+2251Cx5I5B1ewsZB8UGG41k+iGAxGAAMIv9geDofDJvsmmjRgAjAn9QGIEGQ2GGRH7BhM1AAEzQoA
  • noe132 1月前
    引用 6
    忽略上面 1 楼。这个应该就没问题了。
    const result = convert(['a', 'b', 'c'] as const)
    需要用 as const,这样 ts 就能拿到 arr 具体的类型了。

    https://www.typescriptlang.org/play?target=99&ssl=1&ssc=1&pln=22&pc=28#code/C4TwDgpgBAggTnAKgewEoQMbLgEwDyJQQAewEAdjgM5RwQCGOy5ANiFFcHAJbkDmAbQC6AGiioipCtXGZs+Tj35jyAVwC2AIwhwAfFAC8UAN4BffUcIkylGnUbM2UAQDo3vAGY6oARTGfvAHUhACgocKgAfihAyRsZRV4+KDCItOifOOkaRP5hVLTCqJNnAGsoXhihAC5fAQByFgo+YAALeqEoUygAMlgEFHQsXDwfXQKiiNrUCbTpifmQ0EgoADEWemAbAFVybmYCCxMJgXLK0ogQZA8oRBrb09DTEJCsck4oN4A3HWBDKAIWVstAYTFY7FygiEugAFPQELVEABKQz6YwTN4fZCaABWtVU5FK5GQAHdyP8APK4zDAFweODIdQAUXIXG4ECocIQLnU9DAMJhX38KIM+gEQoqQiRSImdGAqjg5OxOKg9Bo602Oz2B3gSDQchGiF042er2YHzoVFULD+Rm+vxhDXo9TE9U0Lqg9QwHVVNExwBlZveyCaLhYyD4MMt1tp9EMBiMAAYZZiQxAwxGoxyYy5NPGjABGFPmtMZyPRm0uDD5qAAJiRQA
  • codehz 1月前
    引用 7
    @noe132 不是很懂,<T extends string>(input: T[]): Record<T, number>能解决的事情为啥要玩类型体操
  • noe132 1月前
    引用 8
    @codehz 以为他要连值的类型也要一起有。。。
  • 游客
    9
返回