考虑以下TS定义:
type GenericPropsWithChildren<T> = T & { children?: ReactNode };
type
没什么问题,但我想知道是否有interface
等效项吗?显然有可能将泛型向下传递到接口,尽管那不是我想要的,例如g。:
interface GenericPropsWithChildren<T> {
children?: ReactNode;
myProps: T; // not desired
}
这里的示例是在React代码的上下文中,但潜在的问题是基本的TS。
答案 0 :(得分:1)
必须在声明时知道接口的成员,在扩展中使用通用类型参数违反了此规则。因此,无法创建等效的通用接口。
如果您已经知道类型参数,则实际上可以在接口中继承类型别名。只要声明时知道所有成员,即可:
import { ReactNode } from 'react'
type GenericPropsWithChildren<T> = T & { children?: ReactNode };
interface Concrete extends GenericPropsWithChildren<{ p: string }> {
}