TypeScript“接口”也是输入验证器吗? (在其他模块或用户请求中)

时间:2019-05-05 01:23:11

标签: typescript

我刚刚使用TypeScript了几个星期,但是我发现它非常有趣!

应用于对象的接口是否也输入验证器?例如,如果我有联系表或API端点,并且声明了它产生的类型-e。 g。:

interface ContactFormData {
  firstName: string,
  lastName: string,
  shoeSize: number,
  favoriteBooks: Book[]
}

我知道它只能确保属性的类型,而不能防止XSS。

假设还可以“未定义”的对象的属性为空,是否还可以通过接口传递标准值?

1 个答案:

答案 0 :(得分:2)

类型在运行时不存在,因此没有类型可以在运行时保护您的应用程序免受任何攻击。

以下面的代码为例。

const data = "" as any as ContactFormData;
data.favoriteBooks[0] // passes. but error at runtime

接下来是接口不是结构的“验证者”,Typescript在结构上是类型化的,这意味着应用程序中具有与ContactFormData相同结构的任何其他类型都可以分配给ContactFormData,类似地,任何超级类型也可以。一组ContactFormData可分配给ContactFormData。

任何来自API的类型本质上都是“任何”或“未知”,您可以尝试输入它,但实际上是一种错误的保护意识,因为如果API掉线,如果API在您之下更改,或者一个在许多其他方式中,可能会发生意外结果,然后您的应用程序将在运行时中断。