检查未知类型的值是否包含 TS 中的属性

检查未知类型的值是否包含 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 }

我们使用
用户定义的类型保护
来检查对象是否包含
nameage属性。

语法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
否则。

用户定义的类型保护在这种情况下很有用,因为在ifTypeScript 块中,类型对象是指定类型的。

索引.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’的错误
,请单击链接并按照说明进行操作。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: