- 阐明:目前网上没有 TypeScript 最新官网文档的中文翻译,所以有了这么一个翻译打算。因为我也是 TypeScript 的初学者,所以无奈保障翻译百分之百精确,若有谬误,欢送评论区指出;
- 翻译内容:暂定翻译内容为 TypeScript Handbook,后续有空会补充翻译文档的其它局部;
- 我的项目地址:TypeScript-Doc-Zh,如果对你有帮忙,能够点一个 star ~
本章节官网文档地址:Indexed Access Type
按索引拜访的类型
咱们能够拜访某个类型上的特定属性,从而获取该属性的类型。这种类型称为按索引拜访的类型。
type Person = { age: number; name: string; alive: boolean };type Age = Person["age"]; ^^^ // type Age = number
索引类型自身也是一个类型,所以它齐全能够和联结类型、keyof
或者其它类型搭配应用:
type I1 = Person["age" | "name"]; ^ // type I1 = string | number type I2 = Person[keyof Person]; ^ // type I2 = string | number | boolean type AliveOrName = "alive" | "name";type I3 = Person[AliveOrName]; ^ // type I3 = string | boolean
如果尝试索引一个不存在的属性,则会抛出谬误:
type I1 = Person["alve"]; ^^^^^^ // Property 'alve' does not exist on type 'Person'.
此外,咱们还能够应用 number
获取数组元素的类型。咱们能够将其与 typeof
相结合,不便地捕捉数组字面量的元素类型:
const MyArray = [ { name: "Alice", age: 15 }, { name: "Bob", age: 23 }, { name: "Eve", age: 38 },]; type Person = typeof MyArray[number]; ^^^^^^ /* type Person = { name: string; age: number; } */ type Age = typeof MyArray[number]["age"]; ^^^ // type Age = number// 或者type Age2 = Person["age"]; ^^^ // type Age2 = number
你只能应用类型作为索引,也就是说,应用 const
创立的变量援用是不能作为索引的:
const key = "age";type Age = Person[key]; ^^^^/* Type 'key' cannot be used as an index type.'key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?*/
不过,你能够改用类型别名重写这段代码:
type key = "agr";type Age = Person[key];