IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> typescript interface 覆盖 -> 正文阅读

[JavaScript知识库]typescript interface 覆盖

我们想对Antd的TimePicker组件进行封装,理由在于他必须接受一个moment对象,而我们的后端接口给我们的是字符串对象。


于是,我们想要

一个接受字符串,onchange时候传回来format后的字符串这样一个组件。

因为我们这个组件的大多数属性和原来TimePicker的props是一样的,所以我们直接继承它

import type { TimePickerProps } from 'antd';
interface TimePickerPropsPlus extends TimePickerProps {
? value?: string;
? onChange?: (value: string) => void;
? format: string;
}


但是这样会遇到一个警告提示:


?参数“value”和“value” 的类型不兼容。

  • ?不能将类型“Moment | null”分配给类型“string”。
  • ?不能将类型“null”分配给类型“string”。

以及


?属性“onChange”的类型不兼容。

  • ?不能将类型“((value: string) => void) | undefined”
  • 分配给类型“((value: Moment | null, dateString: string) => void) | undefined”。

我们无法覆盖掉原来value的类型
谷歌了下,找到了一下

有2种方案


一个是覆盖指定的单个类型:

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>


使用方式:

interface A {
? a: number;
? b: number;
}

interface B extends Omit<A, 'a'> {
? a: boolean;
}


另外一个是批量覆盖:
?

type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;


使用方式:

interface A {
? ? name: string;
? ? color?: string;
}
type B = Merge<A, {
? ? name: string | number;
? ? favorite?: boolean;
}>;

最终

我们的代码改成如下:

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
type ?TimePickerPropsPlus= Merge<
? TimePickerProps,
? {
? ? value?: string;
? ? onChange?: (value: string) => void;
? ? format: string;
? }
>;


常考链接:
https://qa.1r1g.com/sf/ask/2889964801/
Omit:

TypeScript项目实践之 Omit 特性 - 掘金
Extract:

[Day09] TS:什麼!型別也有分配律?理解 Extract 和 Exclude 的實作 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:40:51  更:2022-05-13 11:42:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:51:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码