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

大连做网站软件服务器可以做几个网站吗

大连做网站软件,服务器可以做几个网站吗,官网建设知识,长沙专业建设网站文章将讨论处理类型的几个高级模式#xff0c;包括模拟名义类型的类型烙印、利用条件类型的分配性质在类型层面操作类型#xff0c;以及安全地扩展原型。 1 函数类型 TS在推导元组的类型时会放宽要求#xff0c;推导出的结果尽量宽泛#xff0c;不在乎元组的长度和各位置… 文章将讨论处理类型的几个高级模式包括模拟名义类型的类型烙印、利用条件类型的分配性质在类型层面操作类型以及安全地扩展原型。 1 函数类型 TS在推导元组的类型时会放宽要求推导出的结果尽量宽泛不在乎元组的长度和各位置的类型 let a [“hello”,false,1]; // (string | boolean | number)[] 我们有时希望推导结果更严格些比如上面的类型应该为 [string,boolean,number]。我们可以使用类型断言或者as const来收窄推导结果我们还可以自定义函数来实现元组类型收窄 function tupleT extends unknown[](...t: T) {return t; } let t1 tuple(2,false); // [number,boolean] 1.1 自定义类型防护措施 开发中我们时常需要判断对象的类型我们会写一个函数来进行判断 function isString(input: unknown) {return typeof input string; } 但是这个函数在某些场景中可能会达不到我们的预期效果 function fun(input: string | number) {if (isString(input)) {input.toUpperCase();//报错 Property toUpperCase does not exist on type string | number// Property toUpperCase does not exist on type number} } 这是因为TS类型细化能力有限只能细化当前作用域中变量的类型即上面代码中TS只能在isString函数中来保证input是个string类型。 TS内置特性类型防护措施。这是typeof和instanceof细化类型的背后机制。我们通过自定义类型防护措施来实现类型的细化在作用域之间转移 function isString(a: unknown):a is string {return typeof a string; } function fun(input: number | string) {if (isString(input)) {input.toUpperCase();} } 2 条件类型 条件类型是声明一个依赖类型U和V的类型T如果 U : V,就把T赋值给A否则赋值给B。例如 type IsStringT T extends string ? true : false。 type A isStringnumber; // false type A isStringstring; // true 条件类型使用广泛可以使用类型的地方几乎都能使用条件类型。 type WithoutArrayTypeT,U T extends U ? never : T[]; type T1 WithoutArrayTypestring | number | boolean, boolean; // string[] | number[] 2.1 infer 关键字声明泛型 在条件类型中不能适用尖括号(T)来声明范型而是使用infer关键字。 type ElementTypeT T extends unknown[] ? T[number] : T; type ElementType2T T extends (infer U)[] ? U : T; // 等效上面type T1 ElementTypenumber[]; // number type T2 ElementType2string[][]; //string[] 2.2 内置的条件类型 ExcludeT,U: 返回在T中而不在U中的类型。 type ExcludeType Excludestring | number | boolean, number; // string | boolean ExtractT,U: 返回T中可赋值给U的类型。 type ExtractType Extract number | boolean, string | number | x; // number NonNullableT: 从T中排出null和undefined。 type A { a? :number,b: string | null}; type aType NonNullableA[a]; // number type A1 NonNullableA; // A {}let a1:A1 {a:1,b:1}; let a2:A1 {}; // Property b is missing in type {} but required in type A let a3:A1 {b:null}; ReturnTypeF: 计算函数的返回类型不适用泛型和重载的函数。 type Fun () string; type T1 ReturnTypeFun; // string InstanceTypeC: 返回类构造方法的实例类型。 type CustomClass {new(): C} type C {name:user}; type T InstanceTypeCustomClass; // {name: user} 3 断言 在没有足够时间把所有类型都规划好但是我们希望TS不要因为这个而让我们程序运行不起来我们可以使用断言的方式但要尽量少用如果大量依赖这些说明项目需要重构了。 1类型断言。有两种方式as 和尖括号。 function fun(input: string | number) {let str input as string;// stringlet str2 string input; // string } 2非空断言。 type Student {id?: number}; let s:Student {}; let s2: Student {id: 2}; function fun2(id: number) {} fun2(s.id!); fun2(s2.id!); fun2(s2.id); // 报错 Argument of type number | undefined is not assignable to parameter of type number. 3明确赋值断言。TS通过明确赋值检查确保使用变量时已经为其赋值。 我们在定义一个变量时如果在没有为其赋值而使用它那么TS将报错。 class Student{name: stringshowName() {console.log(this.name);} }let student new Student(); student.showName(); // 报错  Property name has no initializer and is not definitely assigned in the constructor. 明确赋值是指在变量名后面加个”!“符号来告诉TS我已经确保在使用这个变量之前我已经为它赋值。 class Student{name!: stringshowName() {console.log(this.name);} }let student new Student(); student.showName(); // undefined 4 名义类型 TS 是结构化类型不是名义类型系统即TS只根据类型结构来判断类型而不是类型名称。而在Java中是根据类名来确定类型的。比如Man 和 People在TS中如果这两个类型的结构是一样的那么它们是同一个类型而在Java中因为它们名字不同就注定它们不是同一个类型。 虽然在TS中通过结构类型给予了开发者很多方便但是有时名义类型能发挥的作用是结构类型很难替代的 定义一个函数要求参数为一个StudentID类型的字符串。而这个StudentID本质上也是字符串类型。 我们可以使用类型烙印技术模拟实现。 4.1 类型烙印 类型烙印即给特定类型一个唯一结构来让它从其他相似类型结构中区别开。 type StudentID string {readonly brand: unique symbol}; function StudentID(id:string) {return id as StudentID; }function showStudentId(id: StudentID) {}let id StudentID(123); // StudentID showStudentId(id); showStudentId(123); // 报错  Argument of type string is not assignable to parameter of type StudentID //Type string is not assignable to type { readonly brand: unique symbol; } 类型烙印降低了运行时的开销是一种编译时结构。 多数应用没必要使用这个不过对于大型应用或者处理容易混淆的类型时带烙印的类型可以极大地提升程序的安全性。
http://wiki.neutronadmin.com/news/26446/

相关文章:

  • 新加坡网站制作蒲县网站建设
  • app合作开发福州seo推广服务
  • 兰州市建设工程质量监督站网站wordpress 引用 格式
  • 济南建设网站制作优化分析河南项目信息网
  • 什么后台做网站安全做网站是要写代码的吗
  • 怎样建立微信公众号平台seo关键词如何设置
  • 网站优缺点分析小型网站建设案例
  • 徐州网站平台企业网站备案管理系统
  • 网站优化技术ai免费logo设计一键生成
  • 网站开发的心得晋江论坛网站
  • 实训小结网站建设建设内部网站目的
  • 网站建设高级教程用电脑做网站服务器
  • 能自己做谱子的网站百度知道网址
  • 模版网站可以做seo吗seo关键词优化推广报价多少钱
  • 门户网站建设工作方案wordpress Meta模块
  • 网站建设可以帮助企业室内设计效果图素材网站
  • 网站建设服务平台网页基于asp的网站设计与实现
  • 网站建设行业增长率wordpress使用流程
  • 建设企业网站方案chinacd wordpress99
  • 有口碑的中山网站建设12345浏览器网址大全
  • 昆明企业网站排名公司莱芜网站建设及优化
  • 站长工具seo综合查询怎么使用的织梦快速做双语网站
  • 实体店做网站有用吗网络平台怎么建
  • 成都注册网站公司本地wordpress安装教程
  • 自助网站建设厦门网站制作看英语做游戏的网站
  • 徐州市网站建设wordpress修改footer
  • 重庆做营销网站重庆网站关键词排名
  • 如何做优秀的视频网站网站建设公司方案
  • 用nas 做网站自适应网站制作费用
  • 响应式网站开发案例青岛网站建