类型索引如何重命名
interface A { name: string age: number}type TypeA = { [key in `A_${keyof A}`]: A // 如何根据keyof A返回对应的类型}
type TypeA = { [key in keyof A as `A_${key}`]: A[key]}
这个问题似乎是在问如何在TypeScript中为类型索引重命名。在TypeScript中,我们可以通过使用 as
关键字来重命名类型。
但是,在你提供的代码中,你已经使用了 keyof A
来获取 A
类型的所有属性键,然后通过模板字符串字面量将每个键前加上 "A_"
前缀。但是你并没有将得到的键作为索引,也没有使用 as
关键字进行类型重命名。
以下是一种可能的实现方式,通过使用 as
关键字来为类型索引重命名:
interface A { name: string; age: number;}type TypeA = { [P in `A_${keyof A}` as keyof A]: A[P] // 使用 as 关键字重命名类型索引}let x: TypeA = { A_name: "John", A_age: 30 }; // 正确,x 对象的属性与 TypeA 类型定义匹配let y: TypeA = { A_name: "John", A_age: "30" }; // 错误,age 属性的类型不匹配
在上述代码中,TypeA
类型使用了 in
和 as
关键字来为 A
类型的每个属性创建一个新的属性。这些新属性使用了 "A_"
前缀,然后是原属性的名称。然后,我们可以通过使用 as
关键字将 "A_"
前缀和原属性名作为索引,使它们与 A
类型的属性一一对应。这样,我们就可以通过这种方式为类型索引重命名了。
下面是一个常见的 JavaScript 函数,实现从一个对象中选取指定属性,得到它们的属性值: function pluck(o, names) { return names.map(n => o[n]) } 实现这样一个函数的类型定义要满足: 数组参数 names 中的元素,只能是对象 o 身上有的属性。 返回类型取决于参数 o 身上属性值的类型。 我们可以通过索引类型实现这样的类型定义。
本节介绍的类型别名,就是通过关键字 type 给类型起个别名,类型别名较多应用于联合类型、交叉类型这种复合类型。 1. 慕课解释 类型别名会给类型起个新名字。类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型。 用关键字 type 定义类型别名。 2. 举例说明 类型别名不会新建一个类型,而是创建一个新名字来引用此类型。 先看下面几个例子, 原始类型: typ
我正在尝试这样做: 但这给了我一个错误: 除非我将其转换为正确的类型,否则我无法访问脚本元素的“类型”成员,但我不知道如何做到这一点。我搜索了文档
我想创建如下界面: 然后我们可以将它用于一个新类: 我想对s做同样的事情。在纯JavaScript中,我可以使类型,例如,满足以下接口: 但TypeScript不允许我这样做: 有办法做到这一点吗?
主要内容:IShape.ts 文件代码:,Circle.ts 文件代码:,Triangle.ts 文件代码:,TestShape.ts 文件代码:,JavaScript,嵌套命名空间,Invoice.ts 文件代码:,InvoiceTest.ts 文件代码:,JavaScript命名空间一个最明确的目的就是解决重名问题。 假设这样一种情况,当一个班上有两个名叫小明的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的姓(王小明,李小明),或者他们父母的名字等等。 命