TypeScript报错:Type 'null'不可赋值给'transactionArgument'的解决问询
解决TypeScript中
Type 'null' is not assignable to type 'transactionArgument'错误 错误原因
你定义pricingTransaction的类型为transactionArgument,但给它设置了初始值null,而transactionArgument并非可空类型,TypeScript的严格类型检查会阻止这种不匹配的赋值,因此抛出错误。同时你的代码还存在类属性初始化顺序的隐性问题:urlCode和transaction在类顶层直接初始化,它们的执行时机早于构造函数,此时pricingTransaction还未被赋值(甚至是null),会导致后续访问属性时触发空值错误。
修正方案
1. 移除null初始值,正确初始化属性
直接在属性声明时指定类型,通过构造函数传入的参数完成赋值,不需要提前设置null。更简洁的方式是使用构造函数参数属性,在参数前加private/public,TypeScript会自动创建类属性并完成赋值。
2. 延迟初始化依赖属性
将urlCode和transaction改为getter属性,确保它们在被访问时才会计算,此时pricingTransaction已经被构造函数正确赋值,避免空值访问。
修正后的完整代码
export class RegisterPricingTransactionInfo { // 用构造函数参数属性简化属性声明与赋值 constructor(private pricingTransaction: transactionArgument) {} // getter延迟生成urlCode,确保pricingTransaction已初始化 private get urlCode() { return new generateUrlCode( this.pricingTransaction.npServiceDivision, this.pricingTransaction.companyCode, this.pricingTransaction.shopBranchCode, this.pricingTransaction.shopRegistrationDateSeq, this.pricingTransaction.shopCode, this.pricingTransaction.npTransactionId ).urlCode(); } // getter延迟生成transaction对象 private get transaction(): executeTransaction { return { npServiceDivision: this.pricingTransaction.npServiceDivision, shopCode: this.pricingTransaction.shopCode, npTransactionId: this.pricingTransaction.npTransactionId, companyCode: this.pricingTransaction.companyCode, }; } public registerPricingTransactionInfo = async () => { await getRepository(PricingTransaction) .createQueryBuilder() .insert() .into(PricingTransaction) .values([this.transaction]) .execute(); return this.transaction; }; }
关键修改说明
- 移除
pricingTransaction的null初始值,通过构造函数参数属性直接完成属性声明与赋值,类型完全匹配。 - 使用getter延迟初始化
urlCode和transaction,避免在构造函数执行前访问未初始化的pricingTransaction。 - 移除原构造函数中无效的
this.registerPricingTransactionInfo代码。 - 类名改为大驼峰格式
RegisterPricingTransactionInfo,符合TypeScript命名规范。
内容的提问来源于stack exchange,提问作者Heisenberg
相关产品推荐
相关产品推荐

