Return 基于输入类型的类型

Return type based on input type

我知道有类似的问题,但我没听懂。

如何将类型配置为 inputType = outputType

public addReadableTime(message: PublicMsg | PrivateMsg): PublicMsg | PrivateMsg {
   message.displayTime = moment(message.lastModified).format('HH:mm');
   return message;
}

// ...

const publicMsg = this.addReadableTime(publicMsg);

TS2322: Type 'PublicMsg | PrivateMsg' is not assignable to type 'PublicMsg'.   Property 'publicChannelMessageId' is missing in type 'PrivateMsg' but required in type 'PublicMsg'.

看来您需要的是具有类型约束的泛型方法:

public addReadableTime<T extends PublicMsg | PrivateMsg>(message: T): T {
   message.displayTime = moment(message.lastModified).format('HH:mm');
   return message;
}

// ...
const publicMsg2 = this.addReadableTime(publicMsg);