检查未知类型的值是否包含 TS 中的属性
Check if Value with Unknown Type contains Property in TS
使用用户定义的类型保护来检查具有unknown
类型的值是否包含 TypeScript 中的属性。
用户定义的类型保护由一个函数组成,该函数检查特定属性是否包含在对象中并返回谓词。
索引.ts
interface Person { name: string; age: string; } function isPerson(obj: unknown): obj is Person { return ( typeof obj === 'object' && obj !== null && 'name' in obj && 'age' in obj ); } const obj: unknown = { name: 'Bobby Hadz', age: 30, }; if (isPerson(obj)) { console.log(obj.name); // 👉️ "Bobby Hadz" console.log(obj.age); // 👉️ 30 }
我们使用
用户定义的类型保护
来检查对象是否包含name
和age
属性。
语法
obj is Person
是类型谓词,其中必须是函数采用的参数的名称。 obj
我们首先检查传入的值是否
为
object
.
不幸的是,我们还必须
检查该对象是否不等于 null
,因为null
在 JavaScript(和 TypeScript)中有一种对象类型。
索引.ts
console.log(typeof null); // 👉️ "object"
此时,我们可以使用
in 运算符
来检查对象中是否包含name
和属性。age
索引.ts
const obj = { name: 'Bobby Hadz', age: 29, }; console.log('name' in obj); // 👉️ true console.log('age' in obj); // 👉️ true console.log('test' in obj); // 👉️ false
运算in
符检查特定属性是否包含在对象或其原型链中,并返回布尔结果 –true
如果是,false
否则。
用户定义的类型保护在这种情况下很有用,因为在if
TypeScript 块中,类型对象是指定类型的。
索引.ts
interface Person { name: string; age: string; } function isPerson(obj: unknown): obj is Person { return ( typeof obj === 'object' && obj !== null && 'name' in obj && 'age' in obj ); } const obj: unknown = { name: 'Bobby Hadz', age: 30, }; if (isPerson(obj)) { // 👉️ obj is of type Person here console.log(obj.name); // 👉️ "Bobby Hadz" console.log(obj.age); // 👉️ 30 }
一旦我们进入if
块中,TypeScript 就会知道obj
变量的类型
Person
,并允许我们访问 a 的所有属性Person
。
如果您收到Object is of type ‘unknown’的错误
,请单击链接并按照说明进行操作。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: