по умолчанию (enum)?
// types.ts
export enum MsgType {
Ping,
Message
}
export type PingReq = {
type: MsgType.Ping
}
export type MessageReq = {
type: MsgType.Message
data: string
}
export type Requests = PingReq | MessageReq;
Пробовал по-разному, но не работает: поле type всегда undefined.
// hub.ts
private send(request: Requests) {
console.log(request); // undefined
}
const req: PingReq = {};
send(req);
const req = <PingReq>{};
send(req);
Запомни простую вещь. Пишешь на ts, исполняется на js. Все типы вырезаются на этапе tsc. Другими словами, если в ts файле ты убедился, что поле type у тебя соответствует определенному enum значению, то дальше компилятор подскажет, что за тип у сообщения. А вот в рантайм никто уже предупреждать не будет, и если отправил пустой объект, то скорее всего получишь exception при попытке доступа к несуществующему полю.
Обсуждают сегодня