繁体   English   中英

如何确保 object 符合 Typescript 接口?

[英]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接口的所有属性????

如果您的意思是static 类型检查...

如果通过“验证 object 是否具有接口的所有属性”,您的意思是static 类型检查,那是 Typescripts 工作,如果您使用尝试将 ZA8CFDE6331BD49EB62AC96F891 的变量分配给该接口类型,它将在编译时执行此操作。 例如:

const obj = {name: 'Edwin', age: 35}

let c: Customer = obj // this will fail at compile time

如果您的意思是运行时类型检查...

Typescript 在运行时只是 Javascript,而 Javascript 没有第一个支持 ZA2F2ED4F8EBC2CBB14C21A29DC40 接口。 事实上, VehicleUserCustomer在运行时甚至不会因为类型擦除而存在。 有关更多信息,请参阅 Typescript 手册和文档中的这些这个 因此,您不能在任何运行时逻辑中引用这些类型。 Javascript instanceof运算符仅适用于 Javascript 原型 inheritance,并且具有非常具体的含义:

instanceof 运算符测试构造函数的原型属性是否出现在 object 的原型链中的任何位置。 返回值为 boolean 值。

实例| MDN

Javascript typeof运算符仅适用于原始类型,例如string

如果您需要进行运行时“类型检查”,则必须手动进行,递归检查每个字段的存在及其类型。

Typescript 有一些语法糖,使您的 Typescript 源代码中的此类手动检查看起来很自然。 阅读有关缩小和类型保护的信息。

我什至有一个库可以为你实现它。 事实上,我确实记得遇到过一个基于 Typescript 定义生成运行时类型检查的库......让我很快找到它......

一些例子(还有更多):

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM