typescript - 将打字稿接口限制为另一个接口
问题描述
给定一个打字稿界面:
interface alpha {
name?: string;
age?: string;
sign?: string;
}
我想创建另一个界面,该界面仅限于具有来自另一个界面的一组有限属性
interface beta {
age?: string;
}
这可能吗?
如果有人有:
interface beta {
foo?: string;
}
我希望它无效。
解决方案
很好的答案:如何通过扩展从 TypeScript 界面中删除字段
因此,您创建了一个名为“辅助类型”,例如Omit
从您的界面中省略某些属性:
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
同样,您还可以修改现有接口的属性,这可能会多次使用:
type Readonly<T> = {
readonly [P in keyof T]: T[P];
}
type Partial<T> = {
[P in keyof T]?: T[P];
}
此外,有时更容易扭转局面。从 beta 扩展 alpha。
interface alpha extends beta {
name?: string;
sign?: string;
}
interface beta {
age?: string;
}
const x: alpha = {
name: "foo" // valid
}
const y: beta = {
name: "where" // invalid
}
推荐阅读
- php - 为 foreach() 搜索结果提供的参数无效
- json - 使用 Alamofire 将 Web 服务响应转换为 JSON 对象
- jquery - 在移动设备上错误位置注册点击的下拉菜单。为什么?
- twig - 产品页面中的 Opencart 3.x 类别 ID
- python - Scikit-learn - 处理形状变化的数据
- mysql - SQL 参数日期运行时间过长
- wordpress - PHP 警告:strpos(): Empty needle in D:\Hosting\110000\html\xxxx\wp-admin\includes\network.php 在第 353 行
- c# - “找不到方法:'System.Data.Entity.Migrations.Builders.TableBuilder'”
- android - 在两个应用程序之间传递图像
- drupal - 将“其他”选项添加到实体参考选择列表