当前位置:网站首页>【ts】typescript高阶:模版字面量类型
【ts】typescript高阶:模版字面量类型
2022-08-05 05:16:00 【六月的可乐】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
typescript高阶之模版字面量类型
前言
学习目标
1、模板字面量类型语法
2、模板字面量类型示例
一、模板字面量类型语法
模版字面量类型
// `${T}` // 对于模板字面量类型中的类型变量T只能是string、number、boolean、bigint
// 例子
type Direction = 'left' | 'right' | 'top' | 'bottom';
type CssPadding = `padding-${
Direction}`; // "padding-left" | "padding-right" | "padding-top" | "padding-bottom"
type MarginPadding = `margin-${
Direction}`;// "margin-left" | "margin-right" | "margin-top" | "margin-bottom"
// 例子
type EventName<T extends string> = `${
T}Change`;
type Concat<T extends string, U extends string> = `${
T}-${
U}`;
type toString<T extends string | boolean | number | bigint> = `${
T}`;
type T0 = EventName<'foo'>;// "fooChange"
type T1 = Concat<'hello', 'word'>; // "hello-word"
type T2 = toString<true>; // "true"
type T3 = toString<'hello' | false | 2222 | -1234n>; // "hello" | "false" | "2222" | "-1234"
二、模板字面量类型示例
1.减少重复代码、提高复用性
代码如下(示例):
// 例子
type Direction = 'left' | 'right' | 'top' | 'bottom';
type CssPadding = `padding-${
Direction}`; // "padding-left" | "padding-right" | "padding-top" | "padding-bottom"
type MarginPadding = `margin-${
Direction}`;// "margin-left" | "margin-right" | "margin-top" | "margin-bottom"
2.运算规则
1、单个占位符的联合类型自动展开(f分布式匹配原则)
//单个占位符的联合类型自动展开
// A | B | C ====> `[${T}]` ====> `[${A}]` | `[${B}]` |`[${C}]`
// 模板字面量与其他工具类型一起使用
type CetterName<T extends string> = `get${
Capitalize<T>}`;
type Cases<T extends string> = `${
Uppercase<T>}---${
Lowercase<T>}----${
Capitalize<T>}---${
Uncapitalize<T>}`;
type T6 = CetterName<'name'>;// "getName"
type T7 = Cases<'bar'>;// "BAR---bar----Bar---bar"
2、多个占位符的联合类型解析为叉积
// 多个占位符的联合类型解析为叉积
// A | B 和 C| D ====> `${S1}-${S2}` ====> `${A}-${C}` | `${A}-${D}` | `${B}-${C}` | `${B}-${D}`
// 模版字面量类型与条件类型infer一起使用
type InferRoot<T> = T extends `${
infer R}${
Capitalize<Direction>}` ? R : T;
type T8 = InferRoot<'marginLeft'>;// "margin"
type T9 = InferRoot<'paddingTop'>;// "padding"
总结
边栏推荐
- Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
- BFC详解(Block Formmating Context)
- [Pytorch study notes] 11. Take a subset of the Dataset and shuffle the order of the Dataset (using Subset, random_split)
- 原来何恺明提出的MAE还是一种数据增强
- SharedPreferences和SQlite数据库
- BroadCast Receiver(广播)详解
- 如何组织一场安全、可靠、高效的网络实战攻防演习?
- Service
- 基于Flink CDC实现实时数据采集(一)-接口设计
- 关于基于若依框架的路由跳转
猜你喜欢
CVPR 2022 | 70% memory savings, 2x faster training
物联网:LoRa无线通信技术
Kubernetes常备技能
网络信息安全运营方法论 (上)
【数据库和SQL学习笔记】6.SELECT查询4:嵌套查询、对查询结果进行操作
大型Web网站高并发架构方案
[Go through 4] 09-10_Classic network analysis
spingboot 容器项目完成CICD部署
【论文精读】ROC和PR曲线的关系(The relationship between Precision-Recall and ROC curves)
Thread handler handle IntentServvice handlerThread
随机推荐
【零基础开发NFT智能合约】如何使用工具自动生成NFT智能合约带白名单可Mint无需写代码
基于Flink CDC实现实时数据采集(三)-Function接口实现
SharedPreferences and SQlite database
flink部署操作-flink on yarn集群安装部署
基于STM32F407的WIFI通信(使用的是ESP8266模块)
Flink Broadcast 广播变量
el-pagination左右箭头替换成文字上一页和下一页
[Go through 8] Fully Connected Neural Network Video Notes
IDEA 配置连接数据库报错 Server returns invalid timezone. Need to set ‘serverTimezone‘ property.
网工必用神器:网络排查工具MTR
Flink HA配置
Flink Oracle CDC写入到HDFS
11%的参数就能优于Swin,微软提出快速预训练蒸馏方法TinyViT
[Go through 11] Random Forest and Feature Engineering
吞吐?带宽?傻傻分不清楚
【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)
基于Flink CDC实现实时数据采集(二)-Source接口实现
flink基本原理及应用场景分析
SQL(1) - Add, delete, modify and search
Oracle压缩表修改字段的处理方法