'string' 类型的参数不可分配给 '"A" 类型的参数 | "B"' 尝试将可能的值分配给字符串时
Argument of type 'string' is not assignable to parameter of type '"A" | "B"' when trying to assign possible values to a string
我有两个来自 select 选项的值。为了更好的可读性,我定义了用户可以选择的仅有的两个可能值,但是我在使用这种方法时遇到类型错误:
HTML:
<div>
SERVER
<mat-select (selectionChange)="onChange($event)">
<mat-option value="A">Server A</mat-option>
<mat-option value="B">Server B</mat-option>
</mat-select>
</div>
TS:
const SERVERS = {
SERVER_A: "A",
SERVER_B: "B",
}
private origin: typeof SERVERS.SERVER_A | typeof SERVERS.SERVER_B = SERVERS.SERVER_A;
onChange(e) {
this.server = e.value;
this.setServer(this.server); // Argument of type 'string' is not assignable to parameter of type '"A" | "B"'.
}
setServer(server: "A" | "B"): void { }
我是不是做错了,或者这是不可能的?
或许,您可以创建一个 type
,它是 valueof SERVERS
.
const SERVERS = {
SERVER_A: 'A',
SERVER_B: 'B',
} as const;
type SERVERS_VALUE = typeof SERVERS[keyof typeof SERVERS];
并用 SERVERS_VALUE
类型声明 server
。
server: SERVERS_VALUE;
这个方法可以修改为
setServer(server: SERVERS_VALUE) { }
而不是:
setServer(server: 'A' | 'B') { }
参考
我有两个来自 select 选项的值。为了更好的可读性,我定义了用户可以选择的仅有的两个可能值,但是我在使用这种方法时遇到类型错误:
HTML:
<div>
SERVER
<mat-select (selectionChange)="onChange($event)">
<mat-option value="A">Server A</mat-option>
<mat-option value="B">Server B</mat-option>
</mat-select>
</div>
TS:
const SERVERS = {
SERVER_A: "A",
SERVER_B: "B",
}
private origin: typeof SERVERS.SERVER_A | typeof SERVERS.SERVER_B = SERVERS.SERVER_A;
onChange(e) {
this.server = e.value;
this.setServer(this.server); // Argument of type 'string' is not assignable to parameter of type '"A" | "B"'.
}
setServer(server: "A" | "B"): void { }
我是不是做错了,或者这是不可能的?
或许,您可以创建一个 type
,它是 valueof SERVERS
.
const SERVERS = {
SERVER_A: 'A',
SERVER_B: 'B',
} as const;
type SERVERS_VALUE = typeof SERVERS[keyof typeof SERVERS];
并用 SERVERS_VALUE
类型声明 server
。
server: SERVERS_VALUE;
这个方法可以修改为
setServer(server: SERVERS_VALUE) { }
而不是:
setServer(server: 'A' | 'B') { }