从 TypeScript 中的接口中删除属性
使用 Omit
实用程序类型从接口中删除属性,例如 type WithoutAge = Omit<Person, 'age'>
。 Omit
实用程序类型通过从现有接口中删除指定的键来构造新类型。
interface Person {
name: string;
age: number;
address: string;
}
// ✅ Remove 'age' property from interface
type WithoutAge = Omit<Person, 'age'>;
// ✅ Remove multiple properties from interface
type WithoutAgeAndAddress = Omit<Person, 'age' | 'address'>;
// ✅ Remove property and extend interface
interface PersonWithoutAge extends Omit<Person, 'age'> {
language: string;
}
我们可以使用 Omit
实用程序类型从接口中删除一个或多个属性。
前两个示例创建了一个类型而不是接口,因为我们只是简单地从接口中删除属性而不扩展它(向它添加新属性)。
在不向其添加任何属性的情况下进行扩展和接口是没有意义的,因此声明一个类型更直观。
在第三个示例中,我们从 Person
类型中删除了 age 属性,并使用 language 属性扩展了新构造的类型。
这是上面示例的更详细版本,我们在其中创建符合新构造类型的创建对象。
interface Person {
name: string;
age: number;
address: string;
}
// ✅ Remove 'age' property from interface
type WithoutAge = Omit<Person, 'age'>;
const obj1: WithoutAge = {
name: 'Tom',
address: 'Example str 123',
};
// ✅ Remove multiple properties from interface
type WithoutAgeAndAddress = Omit<Person, 'age' | 'address'>;
const obj2: WithoutAgeAndAddress = {
name: 'Alfred',
};
// ✅ Remove property and extend interface
interface PersonWithoutAge extends Omit<Person, 'age'> {
language: string;
}
const obj3: PersonWithoutAge = {
name: 'James',
address: 'Example str 123',
language: 'English',
};
我们经常会看到在覆盖特定属性的类型时使用的 Omit
实用程序类型。
interface Person {
name: string;
age: number;
address: string;
}
// ✅ Remove property to change its type
interface PersonWithVerboseAddress extends Omit<Person, 'address'> {
address: {
country: string;
city: string;
};
}
const obj3: PersonWithVerboseAddress = {
name: 'James',
age: 30,
address: {
country: 'Chile',
city: 'Santiago',
},
};
我们从 Person
接口中删除了 address 属性,然后将其类型更改为对象。
这比将我们需要的属性从 Person
接口复制到另一个接口要好得多,因为我们仍然向代码的读者发出信号,表明这两个接口之间存在关系。
如果我们试图直接覆盖 address 属性而不首先将其从接口中排除,我们会得到一个错误,因为两个接口上的地址属性类型之间存在冲突。
interface Person {
name: string;
age: number;
address: string;
}
// ⛔️ Error: Type {country: string; city: string} is not
// assignable to type 'string'
// Types of property 'address' are incompatible
interface PersonWithVerboseAddress extends Person {
address: {
country: string;
city: string;
};
}
相关文章
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:77 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 Angular 中使用 TypeScript 的 getElementById 替换
发布时间:2023/04/14 浏览次数:149 分类:Angular
-
本教程指南提供了有关使用 TypeScript 在 Angular 中替换 document.getElementById 的简要说明。这也提供了在 Angular 中 getElementById 的最佳方法。
在 TypeScript 中使用 try..catch..finally 处理异常
发布时间:2023/03/19 浏览次数:180 分类:TypeScript
-
本文详细介绍了如何在 TypeScript 中使用 try..catch..finally 进行异常处理,并附有示例。
在 TypeScript 中使用 declare 关键字
发布时间:2023/03/19 浏览次数:90 分类:TypeScript
-
本教程指南通过特定的实现和编码示例深入了解了 TypeScript 中 declare 关键字的用途。
在 TypeScript 中 get 和 set
发布时间:2023/03/19 浏览次数:172 分类:TypeScript
-
本篇文章演示了类的 get 和 set 属性以及如何在 TypeScript 中实现它。
在 TypeScript 中格式化日期和时间
发布时间:2023/03/19 浏览次数:160 分类:TypeScript
-
本教程介绍内置对象 Date() 并讨论在 Typescript 中获取、设置和格式化日期和时间的各种方法。
在 TypeScript 中返回一个 Promise
发布时间:2023/03/19 浏览次数:182 分类:TypeScript
-
本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。
在 TypeScript 中定义函数回调的类型
发布时间:2023/03/19 浏览次数:201 分类:TypeScript
-
本教程说明了在 TypeScript 中为函数回调定义类型的解决方案。为了程序员的方便和方便,实施了不同的编码实践指南。
在 TypeScript 中把 JSON 对象转换为一个类
发布时间:2023/03/19 浏览次数:108 分类:TypeScript
-
本教程演示了如何将 JSON 对象转换为 TypeScript 中的类。