扩展“通用” TypeScript接口

时间:2019-12-17 08:25:40

标签: typescript typescript-generics

考虑以下TS定义:

type GenericPropsWithChildren<T> = T & { children?: ReactNode };

type没什么问题,但我想知道是否有interface等效项吗?显然有可能将泛型向下传递到接口,尽管那不是我想要的,例如g。:

interface GenericPropsWithChildren<T> {
 children?: ReactNode;
 myProps: T; // not desired
}

这里的示例是在React代码的上下文中,但潜在的问题是基本的TS。

1 个答案:

答案 0 :(得分:1)

必须在声明时知道接口的成员,在扩展中使用通用类型参数违反了此规则。因此,无法创建等效的通用接口。

如果您已经知道类型参数,则实际上可以在接口中继承类型别名。只要声明时知道所有成员,即可:

import { ReactNode } from 'react'

type GenericPropsWithChildren<T> = T & { children?: ReactNode };

interface Concrete extends GenericPropsWithChildren<{ p: string }> {

}

Playground Link