请问下: `interface Edge1<D>` `interface Edge1<D extends PlainObject>` 有什么区别?
请问下: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' },
};
回复
1个回答
test
2024-07-02
一个没有泛型约束,一个有泛型约束,仅此而已。
后者要求泛型 D 必须是个 PlainObject。所以你不能拿 number、string、boolean 之类的类型用。
type N1 = Edge1<number>; // ok
type N2 = Edge2<number>; // error
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容