在打字稿中使用字符串作为对象的属性名称

问题描述 投票:0回答:1

给定一个具有如下类型的对象:

type Variables = {
  _id: string;
  variable1: string;
  variable2: string | null;
  variable3: string | null;
  variable4: string | null;
  variable5: string | null;
}

是否可以使用方括号表示法和字符串来访问其属性之一,而不欺骗 Typescript 的类型系统?目前我正在这样做(大致)是这样的:

const level = 1;
const propertyName = `variable${level}` as unknown as keyof Variables;
const variableAtLevel = instance[propertyName];

尽管我已经实施了保护措施,以免尝试访问不存在的东西,但这看起来充其量是黑客行为,最坏的情况下是潜在的故障点。有没有更安全的方法?

typescript
1个回答
0
投票

是的,您可以在您的类型上使用索引签名来做到这一点。

type Variables = {
  _id: string;
  variable1: string;
  variable2: string | null;
  variable3: string | null;
  variable4: string | null;
  variable5: string | null;
  [x: `variable${number}`]: string | null;
} 
declare const variable: Variables;

const level = 1;
const variableAtLevel = variable[`variable${level}`];

TypeScript 游乐场

© www.soinside.com 2019 - 2024. All rights reserved.