javascript - 为什么运行时类型检查在 ts 中如此重要?

标签 javascript typescript types runtime typechecking

根据official documentation , typescript 是 javascript 的静态类型检查器。这些检查发生在编译时,即。 e.在程序执行之前。 Ts创作者也state它们不提供运行时类型信息或运行时类型检查。因此,在 ts 中创建了许多用于运行时数据验证的库:io-ts、joi、yup、zod 等,最佳实践似乎决定我们使用它们。

有人可以解释为什么运行时类型检查如此重要吗? 如果没有它,会发生什么样的错误? 你有一些实际的例子吗?

最佳答案

假设您有一个像 https://yesno.wtf/api 这样的 api ,它返回一个像这样的 json:

{
  "answer": "no",
  "forced": false,
  "image": "https://yesno.wtf/assets/no/20-56c4b19517aa69c8f7081939198341a4.gif"
}

但您也可以这样输入:

type ResponseData = {
  answer: number[],
  forced: string,
  image: boolean[]
}

TypeScript 会说它很好,但事实并非如此,当你尝试执行类似操作时,它会在运行时抛出错误

image.map(() => /* */)

因为image并不是真正的数组

关于javascript - 为什么运行时类型检查在 ts 中如此重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74733718/

相关文章:

javascript - puppeteer 无法在浏览器中加载 chrome 扩展

node.js - 如何让 TypeScript 2 找到 Node 模块?

typescript - 为什么使用 es3 编译目标时 foreach 无法编译?

go - 如何更正 "if"构造中的类型比较

c - 64位变量存储为32位

javascript - 为什么需要在对象中使用 this.property=property ?

javascript - DOM 有什么问题?

javascript - 更高效的 jQuery 版本包含

javascript - 使用 moment.js 获取指定时区的时间

collections - JUnit:检查集合是否仅包含某种类型的对象