【问题标题】:Why is runtime type checking so important in ts?为什么运行时类型检查在 ts 中如此重要?
【发布时间】:2022-12-09 01:22:14
【问题描述】:

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

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

【问题讨论】:

  • 当您实际获得的数据(来自 API、文件、用户输入...)不是您告诉编译器的形状时会发生什么?
  • function foo(x: number) { return number.toFixed(); } 然后用const y: any = "hello"; foo(y) 调用它。走着瞧吧。

标签: javascript typescript types runtime typechecking


【解决方案1】:

假设你有一个像 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并不是真正的数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2016-04-05
    • 1970-01-01
    • 2022-07-29
    • 2021-10-28
    相关资源
    最近更新 更多