我正在将 js 移植到打字稿,我遇到了一个问题。下面描述的函数适用于两种数据类型,我看到以下错误:
Property 'dateTime' does not exist on type 'Operation | OperationCreated'.
Property 'dateTime' does not exist on type 'OperationCreated'
type DateTime = {
date: string;
};
type Operation = {
dateTime: DateTime;
};
type OperationCreated = {
createdDate: string;
};
const sortByDate = (o1: Operation | OperationCreated, o2: Operation | OperationCreated) =>
stringToMillisecond(o1.createdDate || o1.dateTime.date) - stringToMillisecond(o2.createdDate || o2.dateTime.date);
代替
你可以写
那么写出来的代码会编译得更好,但是你必须加上感叹号:
TS 感到困惑 :) 如果是关于复合类型,那么您必须明确告知打字稿在这种情况下使用哪个参数。像这样的东西:
事实上,这是一种使警报系统静音的方法。
OperationCreated完整的 TS 表示如果类型对象的字段dateTime突然变成空字符串,则肯定会出现一个可能的问题。老实说,您可以摆脱这种类型的联合决策,然后代码会更可靠一些。但是你将不得不稍微习惯 TS 并习惯 JS。