当前位置: 首页 > 知识库问答 >
问题:

typescript - 如何使用TS根据传入的`property`得到对应的数据呢?

谯灿
2024-02-03

如何使用TS根据传入的property得到对应的数据呢?比如JS中常常会根据动态的属性获取结果,如下:

const data = {    name: 'name',    age: 'age',};const type1 = data['name'];  // nameconst type2 = data['sex'];   // undefined

在TS中,可以这样做:

const data: Partial<Record<string, string>> = {    name: 'name',    age: 'age',};const type1 = data['name'];  // string | undefinedconst type2 = data['sex'];    // string | undefined

我需要明确根据提供的property获取类型,该怎么做呢?

const type1 = data['name'];  // stringconst type2 = data['sex'];    // undefined

共有1个答案

钦海荣
2024-02-03

在 TypeScript 中,你可以使用类型断言来明确指定你希望根据提供的 property 获取的类型。类型断言允许你为变量指定一个确切的类型,即使 TypeScript 的类型检查器不能自动推断出该类型。

下面是一个示例,展示了如何使用类型断言来实现你所描述的需求:

const data: Record<string, string> = {  name: 'name',  age: 'age',};// 使用类型断言明确指定 'name' 属性的类型为 stringconst type1 = data['name'] as string;  // string// 尝试获取 'sex' 属性,并使用类型断言明确指定其类型为 stringconst type2 = data['sex'] as string;  // undefined

在上面的示例中,我们定义了一个 data 对象,其属性类型为 Record<string, string>,这意味着每个属性都是一个字符串。然后,我们使用类型断言 as 关键字来明确指定我们希望 data['name'] 的类型为 string,同样也尝试明确指定 data['sex'] 的类型为 string

需要注意的是,如果尝试访问的属性不存在于对象中,TypeScript 会将其视为 undefined 类型,而不是抛出错误。因此,在上述示例中,type2 的类型是 undefined,而不是 string。如果你希望在属性不存在时抛出错误,可以使用非空断言操作符 !,例如:

const type2 = data['sex']! as string;  // 错误:Property 'sex' does not exist on type 'Record<string, string>'.

上述代码会引发编译时错误,因为 data 对象中不存在名为 sex 的属性。

 类似资料:
  • 演示: https://tsplay.dev/NB6axN 代码: 结果: 传入 '/posts' 拿到 Promise<string[]> 传入 '/test' 拿到 Promise<number[]> 前置条件: 尽可能不要强行断言

  • typescript,函数如何根据传入的key,返回对象对应的这些key?比如: 现在这个写法肯定不对,变量attr的推断是unknown,如何写函数getAttr的返回定义,才能让变量attr的推断为{age:number, name:string },就是函数传入了哪些key,就只返回这些key的推断

  • 问题内容: 我有一个像这样的文件: 而且我想按行转移列,因此输出应如下所示: 我写了这个命令: 问题是此命令将所有内容都放在一行上!所以输出是这样的: 问题答案: 这可能起作用: 在Ideone上观看它。

  • 在将typescript与单文件组件一起使用时,我很难从Vue应用程序外部调整数据。 我有一个声明了新Vue的,但是将其分配给一个变量并不能给我该变量可用。所以在Main.ts不工作 我尝试在我的file,我知道我可以用但它没有在中声明的变量。vue文件,仅当我在文件,我看到了它们,但组件模板无法呈现它们。 主要的ts: 应用程序。vue脚本: 当我看到JavaScript实现时,我可以从控制台通

  • vue3+ts+element plus开发的web项目,后端使用的是.net 6开发的web api接口服务端,想实现前端excel上传导入数据,服务端后台 同步处理,最后存到数据库对应的库表中,请问大概该如何实现呢? vue3+ts+element plus开发的web项目,后端使用的是.net 6开发的web api接口服务端,想实现前端excel上传导入数据,服务端后台 同步处理,最后存到

  • 我只想发送数据对象var arrImg中包含的一个字段。我要推送的第一件事是var arrImg的image字段,其条件是checked为true,并将其放入crudData:{'image':[]}上的新数组映像中。然后,第二步,我想在条件为checked为true的情况下,将var arrImg的字段名推送到crudData:{'name':[]}上的新数组名中。选中值首先设置为false,但