写接口类型时,希望一个类型的键值是联合类型中固定的几个
const enum MSGTYPE{
TEXT = 'text',
IMAGE = 'image',
}
// or
// type MSGTYPE = 'text' | 'image';
export interface QywxSendMessage = {
msg_id: number;
msg_name: string;
[key: MSGTYPE]: number;
}
显然会报错An index signature parameter type cannot be a union type. Consider using a mapped object type instead. ts(1337)
问题及解决方式呢:
https://github.com/microsoft/TypeScript/issues/33440
https://github.com/Microsoft/TypeScript/issues/24220
https://github.com/Microsoft/TypeScript/issues/2491
export interface QywxSendMessage = {
msg_id: number;
msg_name: string;
[key in MSGTYPE]: number;
}
写接口类型时,希望一个类型的键值是联合类型中固定的几个中的一个
type MSGTYPE = 'text' | 'image';
export interface QywxSendMessage = {
msg_id: number;
msg_name: string;
[key: MSGTYPE]: number;
// [key: 'text' | 'image']: number;
}
显然也会报错An index signature parameter type cannot be a union type. Consider using a mapped object type instead. ts(1337)
那该如何表示呢?如果用?那显然是有问题的
type MSGTYPE<T> = {'text': T } | {'image':T };
export interface QywxSendMessageParams = {
msg_id: number;
msg_name: string;
}
export type QywxSendMessage = QywxSendMessageParams & MSGTYPE<number>;