【发布时间】:2021-06-30 10:14:46
【问题描述】:
我有一个通过 openapi-generator 生成的打字稿枚举。
看起来像这样:
export declare enum Role {
SubscriptionOwner = "Subscription Owner",
Admin = "Admin",
Developer = "Developer",
Publisher = "Publisher",
Editor = "Editor"
}
我想用它来生成选择选项,类似于下面,取自StackBlitz demo
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;
}
但是,当有“声明”时,它是一个ambient enum,这是行不通的。一旦我删除“声明”它就可以工作,但是由于枚举是一个生成的源,我无法编辑它,它会重新生成。
有什么方法可以将消费者代码中的环境枚举转换为普通枚举,以便生成选项?或者其他从环境枚举生成选项的方法?
更新
好的,我了解了一些关于 .d.ts 文件只是存在于其他地方的代码的标头。我环顾四周,生成的库确实包含以下内容:
var Role;
(function (Role) {
Role["SubscriptionOwner"] = "Subscription Owner";
Role["Admin"] = "Admin";
Role["Developer"] = "Developer";
Role["Publisher"] = "Publisher";
Role["Editor"] = "Editor";
})(Role || (Role = {}));
;
所以从reading this 我知道这将私下准备一个带有这些值的角色对象。那为什么我会收到这个错误呢?
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>
【问题讨论】:
-
我在这里向 openapi-generator GitHub 发送了一个关于生成的枚举环境的问题:github.com/OpenAPITools/openapi-generator/issues/9867,但是,我在某处读到 .d.ts 文件将这些文件视为“声明"d 即使你不使用关键字也隐含
标签: angular typescript enums ambient