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

Angular5-typescript中声明类型的数组

水渊
2023-03-14

我试图实现的是从声明类型数组。

使用enum,我可以这样做:

export enum Day {
    SU = 'su',
    MO = 'mo',
    TU = 'tu',
    WE = 'we',
    TH = 'th',
    FR = 'fr',
    SA = 'sa',
} 

getDays(): String[] {
    return Object.values(Day);
}

输出将是 ['su', 'mo' 等。

我想通过这种方式实现类似的目标:

export declare type WeekDays = 'su' | 'mo' | 'tu' | 'we' | 'th' | 'fr' | 'sa';

输出类似:['su','mo'etc.]

有什么想法吗?我尝试了Object.entries()Object.getown属性名称()。不幸的是,它不起作用。

共有2个答案

汪驰
2023-03-14

typescrpt中的所有类型仅为元数据,在运行时不可用。因此,无法检索字符串文本类型中的有效字符串列表。

湛财
2023-03-14

< code>WeekDays只是一个类型,类型没有任何运行时存在,因此我们无法访问该类型在运行时保存的任何信息。枚举在运行时被表示为对象,这就是为什么我们可以从中提取信息。有关类型与值的讨论,请参阅这里的更多内容。

暴露自定义编译器转换(这意味着用发出额外信息的自定义版本替换库存编译器),我们唯一能做的就是构造一个函数来检索值,这要求我们传入一个完全包含枚举中字符串的对象字面量。虽然这需要我们重新声明字符串,但编译器会检查我们没有添加任何额外的字符串,也没有丢失任何字符串,所以这可能足够好:

export declare type WeekDays = 'su' | 'mo' | 'tu' | 'we' | 'th' | 'fr' | 'sa';
function getValues<T extends string>(values: { [P in T]: P }) : T[]{
    return Object.values(values);
}
// Ok values are all stated, the values are correctly stated.
getValues<WeekDays>({fr: 'fr',mo: 'mo',sa:'sa',su:'su',th:'th',tu:'tu',we:'we'})
// Error values don't match
getValues<WeekDays>({fr: 'frrr',mo: 'mo',sa:'sa',su:'su',th:'th',tu:'tu',we:'we'})
// Error values missing
getValues<WeekDays>({mo: 'mo',sa:'sa',su:'su',th:'th',tu:'tu',we:'we'})
// Error values extra values
getValues<WeekDays>({funDay: 'funDay', fr: 'fr', mo: 'mo',sa:'sa',su:'su',th:'th',tu:'tu',we:'we'})
 类似资料:
  • 我的TypeScript项目中有一个声明文件,如下所示: 这很好用,我可以在项目中的任何地方使用这个名称空间,而无需导入它。 我现在需要从第三方模块导入一个类型并在我的环境声明中使用它: 编译器现在抱怨它找不到名称空间“MyApp”,可能是因为导入阻止了它处于环境中。 是否有一些简单的方法可以在使用第三方类型的同时保留声明的环境性?

  • 我在这里查过了https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md这是TypeScript语言规范,但我找不到如何声明函数的返回类型。 我在下面的代码中展示了我所期望的: 我知道我可以用

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

  • 我是Angular 2和TypeScript的新手,我正在尝试遵循最佳实践。 我试图创建一个TypeScript类,而不是使用简单的JavaScript模型({ })。 但是,Angular 2好像不喜欢。 我的代码是: 我将其用作: 我收到来自 Angular 的错误: 异常:无法解析testWidget的所有参数:(?). 所以我想,模型还没有定义...我把它移到最上面! 除了现在我得到例外:

  • 问题内容: 我了解在创建这样的新对象时: 更通用,并且允许更多的可重用性,但是当创建tri时会发生以下情况: 由于Triangle是GeomObject的子类,因此tri还是不是GeomObject?声明的类型如何影响编译?谢谢 add:另一个问题:说我有 Integer n1 = new Integer(3); Object n2 = new Integer(4); System.out.pri

  • 主要内容:CalcThirdPartyJsLib.js 文件代码:,Calc.d.ts 文件代码:,CalcTest.ts 文件代码:,CalcTest.js 文件代码:,实例TypeScript 作为 JavaScript 的超集,在开发过程中不可避免要引用其他第三方的 JavaScript 的库。虽然通过直接引用可以调用库的类和方法,但是却无法使用TypeScript 诸如类型检查等特性功能。为了解决这个问题,需要将这些库里的函数和方法体去掉后只保留导出类型声明,而产生了一个描述 JavaS