首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用点表示法访问对象类型的字段类型

如何使用点表示法访问对象类型的字段类型
EN

Stack Overflow用户
提问于 2022-10-28 07:37:51
回答 2查看 45关注 0票数 0

给定对象类型,可以使用括号-字符串表示法访问其中一个字段的类型。为什么不能使用点符号,就像在Javascript中一样?它和别的东西有冲突吗?我觉得我错过了一些显而易见的东西。

代码语言:javascript
运行
复制
type Foo = {value: number | string};
type Bar = Foo["value"]; // Works, Bar is number | string
type Baz = Foo.value;    // Error

错误消息说明了名称空间,但是即使有一个名为Foo的名称空间,Foo.value也引用了一个值,而不是一个类型,所以它看起来并不模糊。

EN

回答 2

Stack Overflow用户

发布于 2022-10-28 08:19:26

我还问自己,当我第一次遇到这个特性时。所讨论的特性称为"索引访问类型“,如果您查看文档,很清楚为什么TypeScript选择这种语法而不是点表示法:它非常灵活。考虑以下例子:

代码语言:javascript
运行
复制
type Person = { age: number; name: string; alive: boolean };
type I1 = Person["age" | "name"]; 
// I guess here we could do: type I1 = Person.age | Person.name; 

type I2 = Person[keyof Person];  
 
type AliveOrName = "alive" | "name";
type I3 = Person[AliveOrName];

正如注释中所指出的,第一个示例可以很容易地用点表示法重写,而其他示例在数组索引表示法中更清晰。

也许TypeScript可以为简单情况添加建议的点语法作为语法糖,但我不确定每个人都会喜欢这样,因为对于相同的特性有多个符号。

票数 0
EN

Stack Overflow用户

发布于 2022-10-28 07:58:14

使用以下代码:

代码语言:javascript
运行
复制
type Baz = Foo.value;

如果要使用它,必须定义value变量的值。

因为,对象属性等效于键值对。属性键不是字符串就是符号。

structures#properties

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74232041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档