当前位置: 首页 > news >正文

帝国文章网站模板自助下单网站咋做

帝国文章网站模板,自助下单网站咋做,服装网站建设推荐,北京sem我们可以使用 TypeScript 中的条件类型来根据逻辑定义某些类型#xff0c;就像是在编写代码那样。它采用的语法和我们在 JavaScript 中熟悉的三元运算符很像#xff1a;condition ? ifConditionTrue : ifConditionFalse。我们来看看他是怎么工作的。 TypeScript 的条件类型…我们可以使用 TypeScript 中的条件类型来根据逻辑定义某些类型就像是在编写代码那样。它采用的语法和我们在 JavaScript 中熟悉的三元运算符很像condition ? ifConditionTrue : ifConditionFalse。我们来看看他是怎么工作的。 TypeScript 的条件类型使用方式 假设我们有一个值这个值可以表示用户的出生日期或者年龄。 如果是出生日期那他的类型应该是 string。 如果是年龄那他的类型是 number。 我们来定义这三种类型。 type Dob string; type Age number; type UserAgeInformationT T extends number ? number : string;Dob 和 Age 不需要多解释我们来解释一下 UserAgeInformation。它接受一个泛型可以是任何类型。如果 T extends number 为 true就意味着传入的类型是 number 类型我们就把 UserAgeInformation 设置为 number 类型。否则的话就设置为 string 类型。我们在使用的时候可以这样 let userAge:UserAgeInformationAge 100; let userDob:UserAgeInformationDob 12/12/1945;条件类型和 keyof 组合 除了上面介绍的用法我们还可以通过检查是否扩展了一个对象来更进一步。比如假设我们的客户有两种类型Horse 和 User。两种类型的客户都有 age、name 两个字段。User 类型的客户还有一个 address 字段它表示了详细的地址。Horse 类型的客户有 location 两个字段它只是表示一个大概的位置。我们来定义这几种类型 type User {age: number,name: string,address: string }type Horse {age: number,name: string }type UserAddress {addressLine1: string,city: string,country: string, }type HorseAddress {location: farm | savanna | field | other }在未来我们还可能会有其他类型的客户所以我们可以通过检查 T 是否具有 address 属性如果有我们使用 UserAddress 类型否则使用 HorseAddress 类型。 type AddressComponentsT T extends { address: string } ? UserAddress : HorseAddresslet userAddress:AddressComponentsUser {addressLine1: 123 Fake Street,city: Boston,country: USA }let horseAddress:AddressComponentsHorse {location: farm }T extends { address: string } 的含义是检查 T 是否具有 address 属性。 在条件返回中使用 T 在三元表达式的条件返回中我们也可以使用 T。 比如下面的例子 type User {age: number,name: string,address: string }type Horse {age: number,name: string }type UserTypeT T extends { address: string } ? T : Horselet myUser: UserTypeUser {age: 104, name: John Doe,address: 123 Fake Street }T 被定义为 User当我们调用 UserType 时myUser 的类型就是 User并且需要具有这种类型中所定义的字段。 在类型输出中使用 T 时的联合类型 如果我们在这里传递一个联合类型 type UserTypeT T extends { address: string } ? T : stringlet myUser: UserTypeUser | Horse {age: 104, name: John Doe,address: 123 Fake Street }myUser 的类型会变成是 User|string因为 User 通过了条件检测但是 Horse 没有通过所以它的类型是字符串。 如果我们以某种方式修改 T比如把它设置为数组。所有 T 的值都会被单独修改。 type User {age?: number,name: string,address?: string } type Horse {age?: number,name: string } // 如果 T 包含类型是 string 的 name 属性就会返回 T[] type UserTypeT T extends { name: string } ? T[] : never;// myUser 的类型是 User[]|Horse[]因为 User 和 Horse 都具有 name 属性 let myUser:UserTypeUser | Horse [{ name: John }, { name: Horse }]在这里我们已经简化了 User 和 Horse它们只留下了必须需要的 name 字段。在条件类型中两种类型都包含了 name。所以两者都会返回 true并且返回的类型是 T[]由于两者都返回 true所以 myUser 的类型是 User[]|Horse[]所以我们可以简单地提供一个包含 name 属性的对象数组。这种行为通常很好但是在某些情况下我们希望返回一个数组。在这种情况下如果我们想避免这样分布类型可以在 周围添加 { name: string }。 type User {age?: number,name: string,address?: string } type Horse {age?: number,name: string } // 我们避免分布类型因为 T 和 { name: string} 都在方括号中 type UserTypeT [T] extends [{ name: string }] ? T[] : never;// 这样现在的类型不同了它是 (User|Horse)[] let myUser:UserTypeUser | Horse [{ name: John }, { name: Horse }]通过使用方括号我们的类型已经转为 (User|Horse)[]而不是 User[]|Horse[]。这在某些特殊的场景中很有用。但是条件类型会增加复杂性不可以滥用。 使用条件类型推断类型 我们也可以在使用条件时使用 infer 关键字。假设我们有两种类型一种用于数字数组另一种用于字符串数组。在这个例子中infer 将会推断数组中每个项目的类型并返回正确的类型 type StringArray string[] type NumberArray number[] type MixedArray number[] | string[] type ArrayTypeT T extends Arrayinfer Item ? Item: never// 因为 NumberArray 中项目的类型是 number所以 myItem1 是 number 类型 let myItem1: ArrayTypeNumberArray 45 // 因为 StringArray 中项目的类型是 string所以 myItem2 是 string 类型 let myItem2: ArrayTypeStringArray string // 因为 MixedArray 中项目的类型是 number|string所以 myItem3 是 number|string 类型 let myItem3: ArrayTypeMixedArray string我们在条件类型中定义了一个新的参数 Item它是 extends Array 中的子项 T。但是我们必须传入数组它才会有效因为我们使用的是 Array。如果 T 不是数组那么 ArrayType 的类型将会是 never。 总结 如果你刚接触到 TypeScript 的条件类型你可能会觉得很疑惑。但是它解决了某些特定情况下编写类型比较复杂的一种解决方式。如果你在某个项目中看到它或者简化你想你的项目代码它或许很有用。
http://www.w-s-a.com/news/574861/

相关文章:

  • 用群晖做网站网站中文名称注册
  • 做一个企业网站需要哪些技术app开发公司名字
  • 网站建设有技术的公司图片在线设计平台
  • 建公司网站的详细步骤关于进一步加强网站建设
  • 丰宁县有做网站的吗?维护一个网站一年多少钱
  • 杭州网站设计渠道wordpress购物主题
  • 山东政务网站建设文字logo免费设计在线生成
  • 韩雪个人网站唐山网络运营推广
  • 查建设工程业绩在哪个网站网站建设优化服务如何
  • 江苏省建设工程安全监督网站商洛网站制作
  • 海淀网站建设wzjs51网页设计页面配色分析
  • 网站的备案流程图垦利网站制作
  • 行业用品网站怎么建设外链买东西的网站都有哪些
  • 淘宝做促销的网站集团门户网站建设策划
  • 网站排行榜查询怎样把个人介绍放到百度
  • vps 网站上传河北省招投标信息网
  • 武进网站建设咨询网站定制公司选哪家
  • 郑州市建设投资集团公司网站深圳企业网站建设推荐公司
  • 天津个人网站备案查询dz网站恢复数据库
  • 关于网站建设的期刊文献宣传片文案
  • 物业网站模板下载wordpress+菜单大小
  • 网站建设案例教程视频空间刷赞网站推广
  • 网站建设借鉴做外贸球衣用什么网站
  • 网站建设的前途微信公众号制作网站
  • 做网站之前要安装什么网站改进建议有哪些
  • 网站建设+管理系统开发山东专业网站建设公司
  • 基础微网站开发咨询中国印花图案设计网站
  • 找最新游戏做视频网站天津市招标投标公共服务平台
  • 电影订票网站怎么做注册地址出租多少钱
  • 做网站的规划和设想怎样做能让招聘网站记住密码