当前位置: 首页 > 知识库问答 >
问题:

前端 - 请问下: `interface Edge1<D>` `interface Edge1<D extends PlainObject>` 有什么区别?

丌官和泰
2023-06-17

请问下:
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' },
};

共有2个答案

乐寒
2023-06-17

你这个例子好像没区别,都是兼容的对象数据类型。

如果写了 D extends PlainObject 在泛型里面,需要传入的类型是它的上层类型。即要包函兼容它才行。

哈雅珺
2023-06-17

一个没有泛型约束,一个有泛型约束,仅此而已。

后者要求泛型 D 必须是个 PlainObject。所以你不能拿 number、string、boolean 之类的类型用。

type N1 = Edge1<number>; // ok
type N2 = Edge2<number>; // error
 类似资料:
  • 我在看最新的开发者IDE: Zed的时候, 发现它有一个标签:gpui 请问gpui是什么? 和 GPU 有关系吗?

  • 本文向大家介绍请问error和exception有什么区别?相关面试题,主要包含被问及请问error和exception有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:异常 error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

  • 请问打包和分发的区别是什么? 我在学习Electron的时候,我有看到 electron-builder 是打包工具; electron-forge 是打包/分发工具。 请问打包和分发的区别是什么呢?

  • 请问这2种写法有什么区别?我VSCode运行都是可以运行的。

  • 本文向大家介绍请说明一下sleep() 和 wait() 有什么区别?相关面试题,主要包含被问及请说明一下sleep() 和 wait() 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:线程 sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的

  • 请问,next.js 13.4 之后的 useParams, useSearchParams 有什么区别,如何使用的呢?