如何使用生成的环境光枚举在角度中生成选项



我有一个通过openapi生成器生成的typescript枚举。

它看起来像这样:

export declare enum Role {
SubscriptionOwner = "Subscription Owner",
Admin = "Admin",
Developer = "Developer",
Publisher = "Publisher",
Editor = "Editor"
}

我想用它来生成选择选项,类似于下面,取自StackBlitz演示

import { Component } from '@angular/core';
export declare enum Symbols {
equals = 'u003D',
notEquals = '!='
}
@Component({
selector: 'my-app',
template: `
<p>
Having the symbol as label and name as value:
<select>
<option *ngFor="let symbol of keys(symbols)" [ngValue]="symbol">{{symbols[symbol]}}</option>
</select>
</p>
`
})
export class AppComponent  {
keys = Object.keys;
symbols = Symbols;
}

然而,当存在";声明";,这是一个环境枚举,不起作用。一旦我删除";声明";它是有效的,但是由于枚举是一个生成的源,我不能编辑它,它会重新生成。

有没有办法将消费者代码中的环境枚举转换为普通枚举,以便生成选项?或者通过其他方式从环境枚举生成选项?

更新

好吧,我了解了一些.d.ts文件只是其他地方存在的代码的头文件。我环顾四周,生成的库确实包括以下内容:

var Role;
(function (Role) {
Role["SubscriptionOwner"] = "Subscription Owner";
Role["Admin"] = "Admin";
Role["Developer"] = "Developer";
Role["Publisher"] = "Publisher";
Role["Editor"] = "Editor";
})(Role || (Role = {}));
;

因此,通过阅读本文,我了解到这将私下准备一个具有这些值的Role对象。为什么我会出现这个错误呢?

error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'typeof Role'.

使用时

<option *ngFor="let role of keys(roles)" [ngValue]="role">{{roles[role]}}</option>

好吧,通过更多的阅读,我发现我可以显式地将索引签名声明为字符串,并且返回的值始终是字符串。由于我知道这是真的,因为我正在生成String枚举,并且声明的Role.d.ts也澄清了这一点,我将各个角度组件中的角色定义为

roles: {[name: string] : string} = Role;

在那之后,编译器停止了抱怨,选项生成工作正常。

相关内容

  • 没有找到相关文章

最新更新