当前位置: 首页 > 网络应用技术

打字稿的高级类型功能摘要

时间:2023-03-09 00:18:05 网络应用技术

  组合类型表明一个值可以是几种类型之一,将每种类型与垂直线()分开。

  抬起栗子:

  组合类型需要注意,如果类型是组合类型,我们只能访问所有类型的常见方法或属性。如果要访问特定的类型和方法,则有两种方法:

  使用

  使用

  请注意,在TSX文件中,React编译器用作此标识的组件,因此该表单通常在TSX文件中使用。这种主张类型只能提供一个简单的避免避免错误提示。您不能保证数据类型是某种类型,因此更好的方法是使用以下方法。

  如果制定能力是您自己的,请尝试使用单个设计。

  交叉类型是将多种类型组合为一种类型,将每种类型与()分开。

  它包含所需类型的所有类型的特征,并包含所有类型的特征。

  它类似于接口的继承函数,但两者不同。

  要注意的一件事是,当交叉类型与组合的基本类型结合使用时,交叉类型将转换为类型,以便在执行基本类型时,它将无法满足类型的要求。

  但是,您可以使用交叉类型和组合类型从基本类型的组合类型中确认一项;

  为什么会有交叉类型?实际上,其主要目的是在两个对象合并后生成新的数据结构。这通常是在JavaScript中遇到的。目的是在对象合并后调节数据结构。

  字符串的类型类型允许您指定字符串的必要固定值

  使用StringType类型注册类型后,此值只能是上述三个值中的任何一个。

  字符串类型类型还可以用来区分函数的功能:

  同时,有类型的数字面数量,仅允许指定值的固定值

  使用索引类型,编译器可以检查使用Dynamic属性名称的代码,该名称使用索引类型的目的。

  对索引类型有两个关注点:

  它返回t的已知公共属性名称的联合。它返回字符串字符串类型类型类型,这意味着得分-Type范围与定义此字符串类型的名称等效。类似于JavaScript的属性访问者只是它代表的类型。

  Typescript提供了一种从旧类型-Mapping类型创建新类型的方法。在映射类型中,新类型的形式相同,可以在旧类型中转换每个属性。

  在映射类型中,有两个注意点:

  使用和?通过添加 +和-PREFIX来增加和删除相应的修饰符。如果不添加前缀,则默认值为 + **。

  以上功能组合,总结常见的映射类型语法

  使用映射类型,您可以编写一些工具类型的部分,必需,选择和阅读

  条件类型语法:

  其中,T,U,X和Y是所有占位符类型。您可以以这种方式理解这种语法。当类型T可以分配一个值为U的值时,将返回类型X,否则将返回类型y。

  使用条件类型和条件链,我们还可以同时判断多种类型

  ty t0 = typeName;//“字符串”类型t1 = typeName<"a">;//“字符串”类型t2 = typeName;//“布尔值” type t3 =键入<()?=>?void>;//“函数” t4 =键入;// “目的”

  键入T10 =键入?void)>;//“字符串” |“函数”类型T11 =键入;//“字符串” |“对象” |“不明确的”

  t扩展了你?x:y t => a |b |C A |b |c扩展了你?x:y =>(a扩展u?x:y)|(b扩展u?x:y)|(c)|(c)|(c)|(c)|(c)|扩展u?X:Y)

  键入名称= t excerlean?“ y”:“ n”;

  类型包装tuple = [t]扩展了[布尔值]?“ y”:“ n”;type wrappedarray = t []扩展了布尔值[]:“ y”:“ n”;类型WratedPromise = Promise Exce?“ n”;类型T0 =裸;//“ n” |“ y”类型T1 =包装;//“ n” type t2 =包装;//“ n” type t3 = wrappedpromise;//“ n”

  类型排除?= t excern u?下一步:t;类型T4 =排除<"a"?|?"b"?|?"c",?"a"?|?"b"> (“ a” a“扩展” a“ a” | b“?永不:“ a”)// => never |(“ b”扩展“ a” a“ a” | b”?nover:“ b”)// => nover |(“”c“扩展” a“ a” | b“?永远:“ c”)// =>>“ c”永不|永远| c“ // =>” c”

  type functionPropertyNames = {[k in Keyof t]:t [k]扩展函数?k:从不;} [keyof t];type functionProperties =选择;

  键入nonfunctionpropertynames = {[k in Keyof t]:t [k]扩展功能?下一步:k;} [keyof t];键入nonfunction properties =选择;

  接口用户{id:number;名称:字符串;衰老:数字;updateName(newname:string):void;}

  = nonfunctionProperties;// {身份证号;名称:字符串;AGPE:数字;}

  类型排除?= t exce:t;类型提取物?= t Extten u?T:永远不会;键入非词性= t超过null |固定不足?从不:t;类型参数?任何> = t扩展(... args:peash p)=>是否吗?P:永不;键入retuntype?任何> = t exce(... args:any)=>推断r?R:任何;

  原始:https://juejin.cn/post/70960805555170594829