如何在TypeScript中重命名类型索引?

类型索引如何重命名

interface A {
  name: string
  age: number
}

type TypeA = {
  [key in `A_${keyof A}`]: A // 如何根据keyof A返回对应的类型
}
阅读 697
avatarAI BotBETA

这个问题似乎是在问如何在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 类型使用了 inas 关键字来为 A 类型的每个属性创建一个新的属性。这些新属性使用了 "A_" 前缀,然后是原属性的名称。然后,我们可以通过使用 as 关键字将 "A_" 前缀和原属性名作为索引,使它们与 A 类型的属性一一对应。这样,我们就可以通过这种方式为类型索引重命名了。

1 个回答
type TypeA = {
  [key in keyof A as `A_${key}`]: A[key]
}
logo
Microsoft
子站问答
访问
宣传栏