当前位置:网站首页>【ts】typescript高阶:键值类型及type与interface区别
【ts】typescript高阶:键值类型及type与interface区别
2022-08-05 05:16:00 【六月的可乐】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
typescript高阶之键值类型及type与interface区别
前言
学习目标:
1、键值类型的语法
2、type与interface的区别
3、类型别名与接口的一些使用场景总结
一、键值类型的语法
1、语法
// 键值类型语法
{
[key: KeyType]: ValueType }
// 注意在键值语法中KeyType类型只能是string、number、symbol或则模板字面量 不能是纯字面量
2、错误例子
// 错误例子
interface Dictionary {
[key: boolean]: string;// 错误 keyType不能是boolean
};
// 模板字面量例子
interface ProChangeHandler {
[key: `${
string}Changed`]: () => void;// 正确
};
let handlers: ProChangeHandler = {
idChanged: () => {
},
nameChanged: () => {
},
ageChange: () => {
}, // 错误 不符合模板字面量规定的格式 少一个字符d
}
// 使用字面量的错误例子
interface User1 {
[key: 'id']: string; // 错误 keyType不允许是字面量类型
}
interface User2 {
[key: 'id' | 'age']: string; // 错误 keyType不允许是字面量类型
}
// 解决以上问题可以如果Record这个工具类型
type User3 = Record<'id', string>; // 正确
type User4 = Record<'id' | 'age', string>; // 正确
3、正确例子
// keyType是string类型时中括号取值
interface NumberNams {
[key: string]: string;
}
let names: NumberNams = {
'1': 'name',
2: 'age', // 正确 在对象中属性都会经过隐式转换变成 string
};
const name = names['1']; // 正确
const name2 = names[1]; // 正确 会经过隐式转换变成 string
type N0 = keyof NumberNams; // 注意结果是 string | number,这说明由于隐式转换的作用在keyType中 string、number类型是兼容的
二、type与interface的区别
1.相同点一
代码如下(示例):
// 1.相同点一:类型别名和接口都可以用来描述对象或函数
// type
type Ponit = {
x: number;
y: string;
};
type SetPonit = (x: string) => void;
// interface
interface Ponit2 {
x: number;
y: string;
};
interface SetPoint2 {
(x: number): number;
};
let fn1: SetPonit = (x: string) => {
};
let fn2: SetPoint2 = (x: number): number => {
return 1 };
2.相同点二
代码如下(示例):
// 2.相同点二:类型别名和接口都支持拓展
// type通过交叉运算拓展
type Animal = {
name: string;
};
type Dog = Animal & {
age: number };// {name: string;age: number};
// interfcae通过extends继承拓展(支持多继承)
interface Animal2 {
name: string;
};
interface Cat extends Animal2 {
color: string;
};// {name: sting;color: string;}
// 同时type和interface也支持一起使用来进行拓展
type Perple = {
name: string;
};
interface Person {
age: number;
}
type P1 = Perple & Person;// {name; string;age: number};
interface P2 extends Perple {
color: boolean;
};// {color: boolean; name: string}
4.不相同点一
// 不同点:同名接口会自动合并,而别名不会
// 基于这个特性常常在项目中用于拓展第三方模块的类型
// interface
interface User1 {
name: string;
};
interface User1 {
age: number;
}
// 所以最终的User1是{name: string;age: number};
// type
type User2 = {
name: string;
};
type User2 = {
age: number;
}// 报错 别名定义重复
三、类型别名与接口的一些使用场景总结
使用类型别名的场景
- 定义基本类型的别名时,用type
- 定义元组类型时,用type
- 定义函数类型时,用type
- 定义联合类型时,用type
- 定义映射类型时,用type
使用接口的场景
- 利用接口自动合并特性时候,用interface
- 定义对象类型且无需type时,用interface
总结
边栏推荐
- MSRA proposes extreme masking model ExtreMA for learning instances and distributed visual representations
- [Go through 11] Random Forest and Feature Engineering
- flink项目开发-flink的scala shell命令行交互模式开发
- 轻松接入Azure AD+Oauth2 实现 SSO
- [Kaggle project actual combat record] Steps and ideas sharing of a picture classification project - taking leaf classification as an example (using Pytorch)
- 【论文精读】ROC和PR曲线的关系(The relationship between Precision-Recall and ROC curves)
- el-table,el-table-column,selection,获取多选选中的数据
- flink部署操作-flink standalone集群安装部署
- 【数据库和SQL学习笔记】5.SELECT查询3:多表查询、连接查询
- 《基于机器视觉测量系统的工业在线检测研究》论文笔记
猜你喜欢

Flink HA配置
![[Go through 4] 09-10_Classic network analysis](/img/f2/e6e71869b8ab014cc1eea0537fc2e7.png)
[Go through 4] 09-10_Classic network analysis

MSRA proposes extreme masking model ExtreMA for learning instances and distributed visual representations

Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总

读论文 - Unpaired Portrait Drawing Generation via Asymmetric Cycle Mapping

flink yarn-session的两种使用方式

【MySQL】数据库多表链接的查询方式

CH32V307 LwIP移植使用

网工必用神器:网络排查工具MTR

MSRA提出学习实例和分布式视觉表示的极端掩蔽模型ExtreMA
随机推荐
吞吐?带宽?傻傻分不清楚
如何编写一个优雅的Shell脚本(三)
网络信息安全运营方法论 (中)
CVPR 2020 - 频谱正则化
如何编写一个优雅的Shell脚本(一)
服务网格istio 1.12.x安装
哥廷根大学提出CLIPSeg,能同时作三个分割任务的模型
6k+ star,面向小白的深度学习代码库!一行代码实现所有Attention机制!
如何组织一场安全、可靠、高效的网络实战攻防演习?
Flink Distributed Cache 分布式缓存
【数据库和SQL学习笔记】8.SQL中的视图(view)
A deep learning code base for Xiaobai, one line of code implements 30+ attention mechanisms.
【数据库和SQL学习笔记】4.SELECT查询2:排序(ORDER BY)、聚合函数、分组查询(GROUP BY)
TinyFlashDB:一种超轻量的可纠错的通用单片机flash存储方案
【Kaggle项目实战记录】一个图片分类项目的步骤和思路分享——以树叶分类为例(用Pytorch)
Thread handler句柄 IntentServvice handlerThread
Facial Motion Capture 调研
flink项目开发-flink的scala shell命令行交互模式开发
【数据库和SQL学习笔记】6.SELECT查询4:嵌套查询、对查询结果进行操作
【数据库和SQL学习笔记】9.(T-SQL语言)定义变量、高级查询、流程控制(条件、循环等)