当前位置:网站首页>Type de condition pour ts Advanced
Type de condition pour ts Advanced
2022-06-13 11:32:00 【Jonny Lan】
Développeurs frontaux àJavascriptLes expressions TERNAIRES dans devraient être familières,L'utilisation d'expressions TERNAIRES permet d'obtenir facilement des résultats de sortie différents en fonction de la valeur d'entrée. TypeScriptUne syntaxe similaire est fournie pour les types,EtJavascriptLa seule différence estTypeScriptC'est le type de données qui fonctionne.
Syntaxe de base
Utilisation de base
T extends U ? X : Y;
TUXYQuatre sont des substituants,Représente quatre types de;T extends UReprésentationTLe type peut être attribué àUType,Il s'agit aussi deTSCompatibilité des types.
Quelques exemples simples
- Déterminer si le type est
stringType
type IsString<T> = T extends string ? true : false;
type C11 = IsString<string>; // true
type C22 = IsString<number>; // false
type C1 = IsString<"1">; // true
type C2 = IsString<1>; // false
Points saillants:Dans l'exemple
trueEtfalseType(Type littéral),Ce n'est pas une valeur.
- Si oui
AnimalType obtenunumberType,SinonstringType
interface Animal {
live(): void;
}
interface Dog extends Animal {
woof(): void;
}
type IsAnimal<T> = T extends Animal ? number : string;
type C3 = IsAnimal<Dog> // number
type C4 = IsAnimal<RegExp> // string
TSAvancékeyofExemples dans
- Réalisation
Omit
type MyOmit<T, K> = { [P in keyof T as P extends K ? never : P]: T[P] };
- Ajouter des propriétés au type d'objet
type AppendToObject<T, U extends keyof any, V> = {[P in keyof T | U]: P extends keyof T ? T[P] : V}
Le type de condition peut être utilisé en combinaison
Voici quelques exemples:: Obtenir le nom du type
type TypeName<T> = T extends string
? 'string'
: T extends number
? 'number'
: T extends boolean
? 'boolean'
: T extends undefined
? 'undefined'
: T extends Function
? 'function'
: 'object';
Cette méthode d'utilisation devrait également être mieux comprise. ,Mais plus d'explications.
Propriétés de distribution du type de condition
Si oui Propriétés de distribution du type de condition Les étudiants moins familiers peuvent avoir raison Exclude,Extract Mise en œuvre douteuse de types d'outils similaires ,Je vais utiliserExclude Pour plus de détails Propriétés de distribution du type de condition .
Points saillants: Les caractéristiques de distribution conditionnelle sont principalement destinées à:
TC'est un type d'union.
ExcludeLogique d'exécution spécifique pour
type Exclude<T, U> = T extends U ? never : T;
type C5 = Exclude<'a' | 'b' | 'c', 'a' | 'b'> // 'c'
Explication:
- Type d'union
TLa distribution devient :'a' extends 'a'| 'b' ? never : 'a' | 'b' extends 'a'| 'b' ? never : 'b' | 'c' extends 'a'| 'b' ? never : 'c'
- Les résultats calculés séparément sont les suivants:
never | never | 'c'- Résultats finaux:
c
La distribution d'un type de condition doit être de type nu
Le type nu signifie qu'il n'est pas Tableau,TupleEtPromise Type d'emballage .
Voici quelques exemples de comparaison: :
type IsString2<T> = [T] extends string[] ? "IS a String" : "Not a String";
type C7 = IsString2<string | number>;
// Résultats: "Not a String"
type IsString3<T> = T extends string ? "IS a String" : "Not a String";
type C8 = IsString3<string | number>;
// Résultats: "IS a String" | "Not a String"
IsString2Dans[T]Enveloppé dans un tableau ,Pas de distribution,Jugement direct[string | number] extends string[], Je l'ai."Not a String";IsString3Dans[T]Non emballé ,Sera distribué,Je l'ai."IS a String" | "Not a String";
never Est un type de Fédération vide
Si vous décidez si un type est never, Peut - être que la première pensée :
type IsNever<T> = T extends never ? true : false; //
C'est mal,Parce que never Représente un type de Fédération vide ,équivalent à aucun, Tout ne sera pas exécuté ,Et enfinneverType, Non. true.
La bonne logique de résolution est de never Changez - le en Tuple. .
type IsNever<T> = [T] extends [never] ? true : false; //
Quelques cas
Obtient le type du premier élément du type de tableau
type First<T extends any[]> = T extends never[] ? never : T[0];
type arr1 = ['a', 'b', 'c']
type C6 = First<arr1> // 'a'
Attention! Ici.
'a','b','c',Type,Type,Type;
Pick A un certain type d'attribut
type PickByType<T, U> = { [P in keyof T as T[P] extends U ? P : never]: T[P] };
type OnlyBoolean = PickByType<{
name: string
count: number
isReadonly: boolean
isEnable: boolean
}, boolean>
// Résultats:
{
isReadonly: boolean;
isEnable: boolean;
}
JugementAny
export type IsAny<T> = 0 extends (1 & T) ? true : false
type IsAny<T> = 0 extends (1 & T) ? true : false
type C9 = IsAny<any>; // true
type C10 = IsAny<string>; // false
Explication:
any & 1 = any,0 extends anyFondé,Alors revenez.true; Adresse d'explication spécifique
Déterminer si les deux types sont exactement égaux
export type Equal<X, Y> =
(<T>() => T extends X ? 1 : 2) extends
(<T>() => T extends Y ? 1 : 2) ? true : false
Explication: Comparer si deux types de fonctions sont exactement égaux en construisant un type de fonction . Adresse d'explication spécifique
infer
Peut être utilisé dans la syntaxe de type conditionnel inferInférence de type, La deuxième partie porte sur cette partie. .
Voici un exemple officiel du type de paramètre get :
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
边栏推荐
- socket编程(中)
- 领导说要明天上线,这货压根不知道开发流程
- 【TcaplusDB知识库】TcaplusDB机型管理介绍
- 【TcaplusDB知识库】TcaplusDB新增机型介绍
- [tcapulusdb knowledge base] Introduction to tmonitor background one click installation (I)
- socket编程(上)
- 2021CCPC网络赛题解加总结
- [tcapulusdb knowledge base] tcapulusdb doc acceptance - Introduction to creating game area
- 统计特殊子序列数目(0,1,2)DP
- 2021CCPC网络赛榜单
猜你喜欢

ARM64 上的性能怪兽:API 网关 Apache APISIX 在 AWS Graviton3 上的安装和性能测试

【TcaplusDB知识库】TcaplusDB新增机型介绍

第七章 文件管理作业

【TcaplusDB知识库】Tmonitor单机安装指引介绍(二)

Chapter VII document management

硬件工程师薪资虚高,你认可吗?

【TcaplusDB知识库】TcaplusDB集群管理介绍

Actual combat analysis of malicious code lab05-01

C#/VB. Net to generate directory bookmarks when word is converted to PDF

Use of servers
随机推荐
ARM64 上的性能怪兽:API 网关 Apache APISIX 在 AWS Graviton3 上的安装和性能测试
[SQL statement basics] - select (supplement to single table query sequence)
Prim finding minimum spanning tree (naive dense graph)
Chapter VI i/o management
Environ. Sci. Technol. (if=9.028) | impact of urban greening on atmospheric environment
Ubuntu installs MySQL compressed package for future reference
抖音如此重视直播销售外卖套餐,会不会是创业者巨大机会?
Chapter VII document management
区间修改乘和加(理解懒标记的好例题)
Web3和NFT中的匿名性问题
【ROS】MoveIt-rviz-七自由度机械臂仿真
塔米狗知识|全面剖析国有企业并购含义及其作用
Ipdu handling caused by mode change of COM
The road of ospo construction of Weibo: how to promote enterprise open source through ospo construction?
Private computing fat core concepts and stand-alone deployment
The leader said he would go online tomorrow, but he didn't know the development process at all
阿里一季度员工减少4000人;程序员写脚本抢挂疫苗号,牟利40万被刑拘;搜狐遭遇史诗级邮件诈骗,张朝阳回应 | Q资讯
Alibaba's employees decreased by 4000 in the first quarter; Programmers wrote scripts to hang up vaccine numbers and were arrested for making a profit of 400000 yuan; Sohu encounters epic email fraud,
基于Vue+Nest.js+MySQL的跨平台开源社区运营管理系统
微众银行OSPO建设之路:如何通过OSPO的建设推动企业开源?