跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 求助,请教一个 Typescript 类型写法问题
未分類
18 4 月 2021

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

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

資深大佬 : usedtobe 12

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

    interface IType {
    a: number;
    b: number;
    c: number;
    }

    这样?

  • 資深大佬 : codehz

    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

    @codehz 应该是你这样…我没看入参…

  • 資深大佬 : noe132

    https://www.typescriptlang.org/play?target=99#code/C4TwDgpgBAggTnAKgewEoQMbLgEwDyJQQAewEAdjgM5RwQCGOy5ANiFFcHAJbkDmAbQC6AGiioipCtXGZs+Tj35jyAVwC2AIwhwAfFAC8UAN4BffUcIkylGgIB0j3gDMdUAIpiXbgOpCAUFBBUAD8UD6SNjKKvHxQgcGJYe6R0jQx-MIJiTmhJlACANZQvOFCAFweAgDkLBR8wAAW1UJQplAAZLAIKOhYuHjuutm5wZWoI4njI9P+oJBQAGIs9MA2AKrk3MwEFiYjRSXkUIUQIMjOUIgVV0UBpv7+WOScUM8AbjrAhlAEqbYcLixYS6AAU9AQlUQAEpDPpjCNnq9kJoAFaVVTkQrkZAAd2ORgA8mjMMB7M44Mh1ABRchAiBUcEIezqehgUGg95eWEGfQCLklITQ6EjOjAVRwY4o1FQeg0ZarDZbHbwJBoOQDRC6YYPJ7MV50KiqFjfIwfL6gmr0apiaqaG1QaoYFqyuzVa22+2251Cx5I5B1ewsZB8UGG41k+iGAxGAAMIv9geDofDJvsmmjRgAjAn9QGIEGQ2GGRH7BhM1AAEzQoA

  • 資深大佬 : noe132

    忽略上面 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

    @noe132 不是很懂,<T extends string>(input: T[]): Record<T, number>能解决的事情为啥要玩类型体操

  • 資深大佬 : noe132

    @codehz 以为他要连值的类型也要一起有。。。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具