首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Typescript泛型方法

Typescript泛型方法
EN

Stack Overflow用户
提问于 2019-07-30 13:11:31
回答 1查看 40关注 0票数 0

我有一个方法,我想在其中传递一个泛型对象数组。我还想传入要查找的对象属性。

因为属性名称可以更改,所以我想用传入的值来切换描述和值。

我如何做到这一点,如何传入属性并从对象数组中取出它的值?

通过执行以下命令,我知道这些属性是否存在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(obj[key].hasOwnProperty(strDisplay))
console.log(obj[key].hasOwnProperty(strValue))


public Test<T>(obj: T[], strDisplay: string, strValue: string) {

    const pickList: PickListOption[] = [];

    Object.keys(obj).forEach(key => {

      const option: IPickListOption = {
        display:obj[key].description  ,
        value: obj[key].value
      };

      pickList.push(option);

    })

    return pickList;
  }

我希望能够返回一个新的列表'pickList‘,其中包含显示和值的键值对。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-30 13:24:10

您对数组使用Object.keys看起来有点不对劲。要将一个数组转换为另一个数组,map是一个更好的选择。

关于选择这两个键,您将需要strDisplaystrValue作为T的值键,以便对对象进行索引:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface PickListOption { value: unknown, display: unknown }
function Test<T>(arr: T[], strDisplay: keyof T, strValue: keyof T) {

  return arr.map((o): PickListOption => ({
    display: o[strDisplay],
    value: o[strValue]
  }))
}

您还可以使用特殊的映射和条件类型将键限制为特定类型的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type KeysOfValueType<T, TValue> = {
  [P in keyof T] : T[P] extends TValue ? P: never
}[keyof T]

interface PickListOption { value: number, display: string }
function Test<T>(arr: T[], strDisplay: KeysOfValueType<T, string>, strValue: KeysOfValueType<T, number>) {

  return arr.map((o): PickListOption => ({
    display: o[strDisplay] as unknown as string,
    value: o[strValue] as unknown as number
  }));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57272549

复制
相关文章
TypeScript - 泛型
从上面的信息概括为泛型是支持多种类型的变量,根据用户需求灵活的变动,达到复用的效果。 在实际开发中,函数是同样的逻辑,只是因为类型的不同,可能要再写一个函数,这样的问题很糟糕。正好泛型就可以用来解决这种问题。
WahFung
2020/08/22
1.2K0
TypeScript泛型
我们可以通过如上代码片段发现方法没有确切定义返回值类型,运行的数组每一项都可以是任意类型
HueiFeng
2020/04/09
7260
TypeScript泛型
我们可以通过如上代码片段发现方法没有确切定义返回值类型,运行的数组每一项都可以是任意类型
HueiFeng
2020/04/10
6780
TypeScript泛型
在 TypeScript 中,泛型(Generics)是一种用于创建可重用的组件的强大工具。泛型允许在函数、类和接口中使用类型参数,使得这些组件能够适应多种数据类型,提高代码的灵活性和可重用性。
堕落飞鸟
2023/05/22
5080
Typescript之泛型
泛型接口的使用 function add<T>(arg1: T, arg2: T): T { return arg1 + arg2; } // <T>(arg1:T,arg2:T)=>T add<number>(1, 2); add<string>('1', '2') // let addFunc: <T>(arg1: targ2: T) => T // let addFunc: { <T>(arg1: T, arg2: T): T } // interface GenAdder { <T>(a
lilugirl
2020/06/28
6160
TypeScript-泛型
还是和之前一样的套路,利用一个需求来引出没有使用泛型的弊端,需求: 定义一个创建数组的方法, 可以创建出 指定长度 的数组, 并且可以用 任意指定的内容 填充这个数组:
杨不易呀
2023/09/28
1600
TypeScript-泛型
typescript入门-泛型
基础定义 function join<T>(list:T[]):string{ return list.join(',') } join<string>(['coco', 'jeck']) 泛型接口 interface join { <T>(args:T[]):string } interface Man<T>{ name:string race:T } 泛型类 class Man<T>{ name:string rece:T constructor(name:stri
copy_left
2021/06/11
5980
TypeScript泛型应用
泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。
前端小鑫同学
2022/12/26
4950
TypeScript泛型应用
TypeScript 函数泛型
泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性
Leophen
2020/08/10
1.1K0
TypeScript 函数泛型
【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ;
韩曙亮
2023/03/29
15.6K0
【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
TypeScript-泛型约束
博主需求: 要求指定的泛型类型必须有 length 属性才可以指定该类型为泛型的类型:
杨不易呀
2023/09/28
2300
TypeScript-泛型约束
泛型_TypeScript笔记6
从类型上看,无论参数是什么类型,返回值的类型都与参数一致,借助重载机制,可以这样描述:
ayqy贾杰
2019/06/12
1.1K0
typescript的泛型_泛型有什么用
指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定具体类型的一种特性。
全栈程序员站长
2022/09/16
1.1K0
typescript的泛型_泛型有什么用
TypeScript中泛型及泛型函数、泛型类、泛型接口,泛型约束,一文读懂
 最近在学TypeScript,然后整理了一下关于TypeScript中泛型的一些笔记。
痴心阿文
2022/11/21
2.8K0
TypeScript系列教程六《泛型》
在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。
星宇大前端
2021/07/19
9330
typescript基础篇(6):泛型
软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,在定义函数,接口或类的时候,不预先指定类型,而是等到使用时才指定——这在创建大型系统时为你提供了十分灵活的功能。
一粒小麦
2020/08/17
9970
typescript基础篇(6):泛型
C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托
给.neter们整理了一份《.NET/C#面试手册》,目前大约4万字左右,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间。对于没有跳槽打算的也可以复习一下相关知识点,就当是查缺补漏!
全栈程序员站长
2022/09/14
2.6K0
C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托
Java进阶:【泛型】认识泛型,泛型方法,泛型类,泛型接口和通配符
例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。
冷环渊
2021/11/29
3.5K0
Java进阶:【泛型】认识泛型,泛型方法,泛型类,泛型接口和通配符
【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )
泛型类用法 : 使用时先声明泛型 , 如果不声明泛型 , 则表示该类的泛型是 Object 类型 ;
韩曙亮
2023/03/29
10.2K0
【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )
泛型方法
上一篇章我们出于类型安全的考虑,不建议使用原生类型,用List<?>代替使用,但是List<?>不允许添加除null以外的任何元素,因此我们需要使用泛型方法List<E>,如下: import jav
java达人
2018/01/31
1.3K0

相似问题

Typescript泛型方法

112

typescript泛型方法类型批注

19

Typescript泛型?

20

TypeScript泛型

11

用TypeScript编写泛型克隆方法

120
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文