[英]TypeScript compiles successfully but output JS shows error
我是 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 的原因,这样我们就可以在运行时发生错误之前捕获它们。
我很感激初学者友好的答案。 谢谢你。
要从编译器获取更多信息,您必须使用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.
您需要使用一些默认值初始化变量,或者您可以像下面的代码一样填充值。
function placeOrder (user: Customer): Order {
let order: Order = {
buyer: user,
itemName: 'Raspberry Pi',
itemPrice: 1000,
isConfirm: true
};
return order
}
或者你也可以做类型断言
function placeOrder (user: Customer): Order {
let order = {} as Order;
order.buyer = user
order.itemName = 'Raspberry Pi'
order.itemPrice = 1000
order.isConfirm = true
return order
}
提供默认值实际上与我的第一个片段没有什么不同。 只是把它的价值。 对于 'string' 我们输入空字符串''
, boolean 我们输入false
等等。 之后,您可以对变量执行任何操作。 提供默认值的片段:
type exampleType = {
exampleBoolean: Boolean,
}
let exampleInstance : exampleType = {
exampleBoolean: false
}
exampleInstance.exampleBoolean = true //change to some real value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.