首页 > 解决方案 > 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 的原因吗,这样我们就可以在运行时发生错误之前捕获它们。

我很感激初学者友好的答案。谢谢你。

规格

标签: javascriptnode.jstypescript

解决方案


要从编译器获取更多信息,您必须使用文件的编译器选项tsctsconfig.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.

推荐阅读