Typescript - 为什么在这种情况下非可选变量可以是未定义的

标签 typescript

如果我创建一个“数据”类型的非可选变量。为什么下一种情况下的值可能是未定义的,如何防止这种情况发生,例如,如果该值不是真正的值,则抛出错误? (如果类型中有很多变量,则无需手动检查每个值)。

`

type data = {
  nonOptional: string
  optional?: string
}

var val: string | any = "example"
val = undefined

var data: data = {nonOptional: val};
console.log("nonOptional value: " + data.nonOptional)

` 输出:“非可选值:未定义”

最佳答案

这称为联合类型折叠

如果您尝试将一个类型与另一个更宽的类型或 any 联合,它将折叠为更宽的类型或 any

您可以将 any 视为最广泛的类型

enter image description here

playground

类型越窄,越安全 (而且更难编码,安全总是伴随着成本)

因此,如果可能的话,请避免 any,因为它是最懒且最不安全的类型

关于Typescript - 为什么在这种情况下非可选变量可以是未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74854667/

相关文章:

node.js - 尝试通过 --experimental-loader 选项使用 mocha、ES6 模块和 ts-node

reflection - 如何从另一个(开发时)程序访问 TypeScript 中的类型信息?

typescript - 返回Typescript中两种类型之一的方法

typescript - 订阅从函数返回的 Observable 仅在第一次有效

node.js - TypeError : Reflect. hasOwnMetadata 不是函数

typescript - 在Preact和Typescript中使用Web组件

javascript - 如何将路径数组转换为树对象?

visual-studio - "Class emulation may be converted to class"提示在 Visual Studio 中意味着什么,它来自哪里?

javascript - Angular 6 将值(value)从一项服务传递到另一项服务?

javascript - Require.js 单例到 TypeScript