请问下:interface Edge1<D>
interface Edge1<D extends PlainObject>
有什么区别?
interface PlainObject {
[key: string]: unknown;
}
interface User {
id: number;
name: string;
email: string;
}
interface Edge1<D> {
id: string;
source: string;
target: string;
data: D;
}
interface Edge2<D extends PlainObject> {
id: string;
source: string;
target: string;
data: D;
}
const edge1: Edge1<User> = {
id: '1',
source: 'user-1',
target: 'user-2',
data: { id: 1, name: 'John', email: 'john@example.com' },
};
const edge2: Edge2<User> = {
id: '2',
source 'user-2',
target: 'user-3',
data: { id: 2, name: 'Tom', email: 'tom@example.com' },
};
一个没有泛型约束,一个有泛型约束,仅此而已。
后者要求泛型 D 必须是个 PlainObject。所以你不能拿 number、string、boolean 之类的类型用。