如下所示,我同时使用接口IServerMessage
和受歧视的联合身份UServerMessage
来存储服务器消息。
IServerMessage
是所有ServerMessage的共同点
UServerMessage
是一个有区别的联合,可帮助TypeScript在切换情况下推断正确的类型。
如果您愿意,可以阅读更多有关我如何在此线程中同时拥有这两项的信息:Can TypeScript infer correct types in a switch block when using extends the same way I can when using unions?
但是,我了解到接口的I
前缀和联合的U
前缀都是非常规的。
在这种情况下,我可以采用什么通用命名约定?我搜索了这个主题,但是很简短。
export interface IServerMessage {
type: string;
}
export interface ServerResponse extends IServerMessage {
type: 'response';
cmd: string;
trans_id?: string;
data?: Object;
}
export interface ServerError extends IServerMessage {
type: 'error',
errorcode: string;
cmd?: string;
trans_id?: string;
data?: Object;
}
export interface ServerProgress extends IServerMessage {
type: 'progress',
cmd: string,
progress_value: number,
trans_id?: string,
data?: string;
}
export interface ServerInformation extends IServerMessage {
type: 'information',
info: string;
data?: Object;
}
export type UServerMessage = ServerResponse | ServerError | ServerProgress | ServerInformation;