Typescript 基于输入类型的返回类型

Typescript 基于输入类型的返回类型,typescript,typescript-generics,Typescript,Typescript Generics,我知道也有类似的问题,但我不明白 如何将类型配置为具有inputType=outputType public addReadableTime(message: PublicMsg | PrivateMsg): PublicMsg | PrivateMsg { message.displayTime = moment(message.lastModified).format('HH:mm'); return message; } // ... const publicMsg = t

我知道也有类似的问题,但我不明白

如何将类型配置为具有
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:类型“PublicMsg | PrivateMg”不可分配给类型“PublicMsg”。类型“PrivateMsg”中缺少属性“publicChannelMessageId”,但类型“PublicMsg”中需要属性“publicChannelMessageId”


看起来您需要的是一个带有类型约束的泛型方法:

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

// ...
const publicMsg2 = this.addReadableTime(publicMsg);
公共addReadableTime(消息:T):T{ message.displayTime=时刻(message.lastModified).format('HH:mm'); 返回消息; } // ... const publicMsg2=this.addReadableTime(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);
公共addReadableTime(消息:T):T{ message.displayTime=时刻(message.lastModified).format('HH:mm'); 返回消息; } // ... const publicMsg2=this.addReadableTime(publicMsg);