今天有一个奇怪的问题,我有一个bug,如果typeof(transaction)
返回object
而不是对象名称,代码的行为会有所不同。我修复了函数中transactionType
参数的问题,但为了向后兼容,我不得不保留旧的逻辑。
let userId: string;
if (transactionType === TransactionTypes.A) {
userId = (transaction as TransactionA).userid;
} else if (transactionType === TransactionTypes.B) {
userId = (transaction as TransactionB).user.id;
} else if (
transactionType === TransactionC
) {
userId = (transaction as TransactionC).userId;
} else {
console.log("LEGACY TRANSACTION TYPE USED...");
// Legacy code, caused an issue when typeof returns "object"
userId =
(transaction as TransactionA).userid ||
(transaction as TransactionC).userId ||
(transaction as TransactionB).user.id;
}
当typeof
返回object
时,我得到userId
的null
返回。我希望能够测试我的新TransactionType
逻辑是否确实工作。
为此,我需要进行一个typeof
返回object
的测试。我尝试将以下内容传递给我的函数,但我的linter出现了类型错误。
下面是函数声明:
private getTransactionValues(
transaction:
| TransactionA
| TransactionB
| TransactionC,
transactionType?: TransactionTypes,
): TransactionValues {
//...
}
我尝试让typeof
返回object
:
const transaction: TransactionB = (generateRandomTransaction() as Object);
getTransactionValues({
transaction,
//~~~~~~~~~~~~ ^ error linter "object not TransactionA | TransactionB | TransactionC"
transactionType: TransactionType.A,
});
是否可以用我的对象模拟一个属性,使它在传递给函数typeof
时返回类型object
?
1条答案
按热度按时间zysjyyx41#
好吧!在一直玩下去之后,发现你可以简单地转换为
unknown
,然后转换为目标类型,这将使typeof
函数返回object
,下面是一个代码示例:显然,通过
unkown
强制转换传递足以使typescript在转换为JavaScript后创建object
类型。