首页 > 解决方案 > 将打字稿接口限制为另一个接口

问题描述

给定一个打字稿界面:

interface alpha {
  name?: string;
  age?: string;
  sign?: string;
}

我想创建另一个界面,该界面仅限于具有来自另一个界面的一组有限属性

interface beta {
  age?: string;
}

这可能吗?

如果有人有:

interface beta {
  foo?: string;
}

我希望它无效。

标签: typescript

解决方案


很好的答案:如何通过扩展从 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
}

推荐阅读