当前位置: 首页 > 知识库问答 >
问题:

如何使用TypeScript声明属性为string类型的对象?

墨高杰
2023-03-14
...
config: ButtonConfig[];
...
this.config.push(new ButtonConfig(...));
...

今天,我意识到让数组像字典一样运行更有意义,这样我就可以通过名称而不是数字索引访问特定元素。我希望能够执行config.submitButton而不是config[3](即使我声明了一个将submitButton映射到请求的索引的枚举)。

...
config = { };
...
this.config.submitButton = new ButtonConfig(...);
...

这是可行的,但我现在允许一堆any欺骗我的代码库,这是很糟糕的。我希望对象知道,只有buttonconfig类型的东西才能放入其中。

我可以用这些字段声明一个类,因为我希望它们的数量在将来可以动态添加,所以下面的操作是不可行的。

export class ButtonConfigs {
  submitConfig: ButtonConfig, ...
}

共有1个答案

孔礼骞
2023-03-14

最简单的答案是这样的:

export type ButtonConfigs = {
  [key: string]: ButtonConfig;
}

如果你想要一个高水平的动态,这工作非常好。

如果您希望稍微锁定它,可以定义一个包含您希望允许的可能键的枚举:

export enum ButtonConfigKeys {
  'submitConfig',
  'someOtherKey',
  '...'
}

export type ButtonConfigs = {
  [key: ButtonConfigKeys]: ButtonConfig;
}
 类似资料:
  • 在编写对象时,有没有方法键入对象的属性?与预先定义类型/接口相反。 我唯一能想到的是,但这太宽松了。考虑一下: 我想要<code>myData。myComment</code>抛出相同的错误。 这当然是一个微不足道的例子。但是如果我正在写一个大的复杂的对象,能够动态地声明它的部分类型会很好。

  • 问题内容: 如何将类属性声明为对象? 我试过了: 但这没有用。另外,为什么要那样做呢? 只实例化该对象并使用其成员不是更好吗? 问题答案: 从有关类属性的PHP手册(重点是我的): 类成员变量称为“属性”。您可能还会看到使用其他术语(例如“属性”或“字段”)来引用它们,但是出于参考目的,我们将使用“属性”。它们是使用关键字public,protected或private之一定义的,后跟普通变量声明

  • 本文向大家介绍如何使用JSP声明来声明类的对象?,包括了如何使用JSP声明来声明类的对象?的使用技巧和注意事项,需要的朋友参考一下 声明声明了一个或多个变量或方法,您可以稍后在JSP文件中的Java代码中使用它们。在JSP文件中使用变量或方法之前,必须先声明该变量或方法。 以下是JSP声明的语法- 您可以编写与上述语法等效的XML,如下所示- 以下是JSP声明中对象声明的示例-

  • 如何使用JSDoc注释向TypeScript编译器声明“类型X具有类型Y的所有属性以及这些其他属性”? 鉴于: 当:我通过运行以下命令进行打字检查: 然后:我希望在检查TypeScript时不会出现错误。 但是:事实上,从这个错误判断,它似乎忽略了由AugmentedBase添加的属性,并将其仅视为Base 错误TS2322:Type

  • 我查看了许多示例代码和文档,无论是隐式构造函数还是显式构造函数,您都可以通过使用类名前面的来声明新类,但随后它们会声明一些值。因此,我认为在某个外部作用域声明它之前,实例是不存在的。

  • LineSeries['areaStyle']的类型是AreaStyle | undefined 报错:类型“AreaStyle | undefined”上不存在属性“color”。 如何通过 LineSeries使用color属性的类型呢?