javascript - TypeScript 编译成功但输出 JS 显示错误
问题描述
我是 TypeScript 的新手,并通过这个简单的代码片段尝试自定义类型声明。
剧本
我有这个脚本:
// app.ts
type Customer = {
name: String,
isFrequentVisitor: Boolean,
}
type Order = {
buyer: Customer,
itemName: String,
itemPrice: number,
isConfirm: Boolean
}
function placeOrder (user: Customer): Order {
let order: Order
order.buyer = user
order.itemName = 'Raspberry Pi'
order.itemPrice = 1000
order.isConfirm = true
return order
}
let person: Customer = {
name: 'John',
isFrequentVisitor: false
}
let newOrder: Order = placeOrder(person)
if (newOrder.isConfirm) {
console.log('The order has been confirmed. Check details below:')
console.log(newOrder)
} else {
console.log('The order has not been confirmed yet.')
}
问题
我能够$ tsc app.ts
成功运行(控制台上没有任何错误),并在文件旁边看到app.js。
但是,运行$ node app.js
时,我收到以下错误 -
/tmp/app.js:3
order.buyer = user;
^
TypeError: Cannot set property 'buyer' of undefined
另外,如果它可能有用,我已经在这里链接了编译的app.js。
我在 Golang 中使用过自定义类型,它们在类似的上下文中工作得很好。
我不确定我在这里缺少什么。
另外,这不是使用 TypeScript 的原因吗,这样我们就可以在运行时发生错误之前捕获它们。
我很感激初学者友好的答案。谢谢你。
规格
- 使用 TypeScript 3.8.3 版
- 使用节点版本 14.4.0
解决方案
要从编译器获取更多信息,您必须使用文件的编译器选项。tsc
tsconfig.json
tsc --strictNullChecks index.ts
上面带有--strictNullChecks
选项的命令应显示如下信息:
index.ts:15:3 - error TS2454: Variable 'order' is used before being assigned.
15 order.buyer = user
~~~~~
index.ts:16:3 - error TS2454: Variable 'order' is used before being assigned.
16 order.itemName = 'Raspberry Pi'
~~~~~
index.ts:17:3 - error TS2454: Variable 'order' is used before being assigned.
17 order.itemPrice = 1000
~~~~~
index.ts:18:3 - error TS2454: Variable 'order' is used before being assigned.
18 order.isConfirm = true
~~~~~
index.ts:19:10 - error TS2454: Variable 'order' is used before being assigned.
19 return order
~~~~~
Found 5 errors.
推荐阅读
- excel - 如何显示用户表单,然后隐藏,然后再次显示而不再次运行用户表单激活代码
- android - 在 Android 9 上打开时停止工作,如何解决?
- c# - 您如何以编程方式在自定义 WPF 面板实现中创建新控件?
- java - 我可以使用 TestInfo 接口从 @BeforeEach 中排除单个测试吗?
- html - 如何在加载时停止 FOUT(无样式文本的闪烁)
- android - Kotlin:在折线图 Mpandroidchart 的 x 轴上设置自定义标签
- google-chrome - 哪些政策会阻止加载未打包的 Chrome 扩展程序?
- angular - 尝试实现 Spinner 时出现异常
- python - 多级图像阈值
- php - Laravel - 发送邮件返回错误无法返回非对象的属性