[英]How do you ensure an object conforms to a Typescript interface?
我如何验证 object 具有接口的所有属性。
例如:
interface Vehicle {
name: string
model: string
}
interface User {
Name: string
age: númber
}
interface Customer extends User {
vehicles: Vehicle[]
}
我如何检查 object 是否具有Customer
接口的所有属性????
如果通过“验证 object 是否具有接口的所有属性”,您的意思是static 类型检查,那是 Typescripts 工作,如果您使用尝试将 ZA8CFDE6331BD49EB62AC96F891 的变量分配给该接口类型,它将在编译时执行此操作。 例如:
const obj = {name: 'Edwin', age: 35}
let c: Customer = obj // this will fail at compile time
Typescript 在运行时只是 Javascript,而 Javascript 没有第一个支持 ZA2F2ED4F8EBC2CBB14C21A29DC40 接口。 事实上, Vehicle
、 User
和Customer
在运行时甚至不会因为类型擦除而存在。 有关更多信息,请参阅 Typescript 手册和文档中的这些和这个。 因此,您不能在任何运行时逻辑中引用这些类型。 Javascript instanceof
运算符仅适用于 Javascript 原型 inheritance,并且具有非常具体的含义:
instanceof 运算符测试构造函数的原型属性是否出现在 object 的原型链中的任何位置。 返回值为 boolean 值。
Javascript typeof
运算符仅适用于原始类型,例如string
。
如果您需要进行运行时“类型检查”,则必须手动进行,递归检查每个字段的存在及其类型。
Typescript 有一些语法糖,使您的 Typescript 源代码中的此类手动检查看起来很自然。 阅读有关缩小和类型保护的信息。
我什至有一个库可以为你实现它。 事实上,我确实记得遇到过一个基于 Typescript 定义生成运行时类型检查的库......让我很快找到它......
一些例子(还有更多):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.