我正在try 定义一个接口,其中对象的类型可以是类or,扩展该类的任何东西.类似于在GraphQLAPI中,任何implements个接口都可以是有效的返回对象.

我希望是这样的:

interface Person {
  name: string
}

interface Superman extends Person {
  clothes: string
}

interface Home {
  address: string
  owner: Person | T extends Person
}

从本质上讲,实现PersonSuperman的任何对象都可以是owner字段的可接受类型.

这样的事情有可能发生吗?

推荐答案

您需要如下所示的泛型类型:

interface Home<T extends Person> {
  address: string
  owner: T
}

这允许您接受扩展为Person的类型作为Home类型的参数,并在您的类型中的某个位置使用该参数.

现在,您可以使用Superman作为T,然后访问未在Person上声明的字段.

const superman: Superman = {
  name: 'Clark',
  clothes: 'cape',
}

const home: Home<Superman> = {
  address: '123 Fake St',
  owner: superman
}

console.log(home.owner.clothes) // fine

See Playground

Typescript相关问答推荐

在使用Typescribe时,是否有一种方法可以推断映射类型的键?

如何使函数接受类型脚本中具有正确类型的链接修饰符数组

类型脚本返回的类型包含无意义的泛型类型名称

适当限制泛型函数中的记录

如何使用类型谓词将类型限制为不可赋值的类型?

使用2个泛型类型参数透明地处理函数中的联合类型

在数据加载后,如何使用NgFor在使用异步管道的可观测对象上生成子组件?

扩展参数必须具有元组类型或传递给REST参数

MatTool提示在角垫工作台中不起作用

如何将定义模型(在Vue 3.4中)用于输入以外的其他用途

Angular:ngx-echart 5.2.2与Angular 9集成错误:NG 8002:无法绑定到选项,因为它不是div的已知属性'

与toast.error一起react 中的Async TUNK错误消息

当传递带有或不带有参数的函数作为组件props 时,我应该如何指定类型?

必需的输入()参数仍然发出&没有初始值设定项&q;错误

如何键入对象转换器

在对象数组中设置值

Typescript 使用短主体箭头函数推断 void 返回类型,但不是常规箭头函数

Angular 外部订阅值 Null

Typescript 在条件 (IF) 块内显示错误,其中不应有未定义的值

如何使用graphql查询枚举数据类型