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

西安有哪些做网站建设的公司广东东莞建设网

西安有哪些做网站建设的公司,广东东莞建设网,电商网站seo公司,网络营销是什么的具体应用类型断言的适用场景及代码示例 适用场景 类型断言就像是你很确定某个东西是什么,然后直接告诉 TypeScript 编译器“相信我,它就是这个类型”。以下是几种常见的适用场景: 从 any 类型恢复具体类型:当你使用 any 类型时&#xf…

类型断言的适用场景及代码示例

适用场景

类型断言就像是你很确定某个东西是什么,然后直接告诉 TypeScript 编译器“相信我,它就是这个类型”。以下是几种常见的适用场景:

  • any 类型恢复具体类型:当你使用 any 类型时,TypeScript 就不会对这个变量做类型检查了。但有时候你心里清楚它实际上是什么类型,这时候就可以用类型断言恢复具体类型。
  • 访问特定类型的属性或方法:有些情况下,TypeScript 无法推断出变量的准确类型,但你知道它具备某些属性或方法,就可以用类型断言来访问。
代码示例
// 场景一:从 any 类型恢复具体类型
let someValue: any = "Hello, TypeScript!";
// 这里我们知道 someValue 实际上是字符串,用类型断言恢复为字符串类型
let strLength: number = (someValue as string).length;
console.log(strLength);// 场景二:访问特定类型的属性或方法
interface Cat {meow(): void;
}
interface Dog {bark(): void;
}function animalSound(animal: Cat | Dog) {// 假设我们确定传入的是 Cat 类型,用类型断言来调用 meow 方法(animal as Cat).meow(); 
}let myCat: Cat = {meow() {console.log('Meow!');}
};animalSound(myCat);

2. 类型断言和类型转换的区别

类型断言和类型转换在概念上很容易混淆,但其实有本质区别。

  • 类型断言:它不是真正意义上的类型转换,只是告诉编译器“我知道这个变量是什么类型,你别管了”。它不会改变变量在运行时的类型,只是在编译阶段让编译器按照你指定的类型来处理。
  • 类型转换:是在运行时把一个类型的值转换成另一个类型的值。比如在 JavaScript 里,Number('123') 就是把字符串 '123' 转换成数字类型。

用大白话来说,类型断言就像是你给编译器“打个招呼”,让它相信你对变量类型的判断;而类型转换是实实在在地把一个东西变成了另一种东西。

3. 交叉类型的实际应用场景

交叉类型就像是把不同的类型“拼”在一起,创造出一个包含所有类型特征的新类型。以下是一些实际应用场景:

  • 组合不同模块的功能:在开发大型项目时,不同的模块可能有不同的接口定义。当你需要一个对象同时具备多个模块的功能时,就可以用交叉类型。
  • 扩展已有类型:如果你想在一个已有的类型基础上添加一些额外的属性或方法,可以用交叉类型来实现。
代码示例
// 组合不同模块的功能
interface User {name: string;age: number;
}interface Permission {canEdit: boolean;canDelete: boolean;
}// 用交叉类型创建一个新类型,包含 User 和 Permission 的所有属性
type UserWithPermission = User & Permission;let user: UserWithPermission = {name: "John",age: 30,canEdit: true,canDelete: false
};console.log(user);// 扩展已有类型
interface Shape {area(): number;
}interface Colorful {color: string;
}// 用交叉类型扩展 Shape 类型,让它具备颜色属性
type ColorfulShape = Shape & Colorful;class Circle implements ColorfulShape {constructor(public radius: number, public color: string) {}area() {return Math.PI * this.radius * this.radius;}
}let redCircle = new Circle(5, "red");
console.log(redCircle.area());
console.log(redCircle.color);

4. 交叉类型和联合类型的区别

  • 交叉类型:就像是把多个类型合并成一个更大的类型,新类型要包含所有参与合并类型的属性和方法。可以理解为“既要……又要……”。
  • 联合类型:表示一个变量可以是多种类型中的任意一种。可以理解为“要么……要么……”。
代码示例
// 交叉类型
interface A {a: number;
}interface B {b: string;
}// 交叉类型,同时具备 A 和 B 的属性
type AB = A & B;let ab: AB = {a: 1,b: "hello"
};// 联合类型
// 变量可以是 A 类型或者 B 类型
let eitherAOrB: A | B = { a: 1 }; 
eitherAOrB = { b: "world" }; 

5. 其他巩固 TypeScript 基础的实践项目

  • 图书管理系统:可以实现图书的添加、删除、查询和借阅等功能。通过这个项目,你可以练习类的定义、对象的操作、数组的处理等知识。
  • 简单的游戏,如猜数字游戏:程序随机生成一个数字,让用户猜测,根据用户的输入给出提示,直到猜对为止。这个项目能让你熟悉条件判断、循环等控制结构的使用。
  • 表单验证工具:可以对用户输入的表单数据进行验证,比如验证邮箱格式、密码长度等。这有助于你掌握正则表达式和类型检查的应用。

6. TypeScript 第四阶段内容(高级类型与装饰器)

高级类型
  • 索引类型:允许你通过索引来访问对象的属性。就好比你有一个大箱子,里面有很多小格子,你可以通过格子的编号(索引)来拿到里面的东西。
interface Person {name: string;age: number;
}function getProperty<T, K extends keyof T>(obj: T, key: K) {return obj[key];
}let person: Person = { name: "Alice", age: 25 };
let personName = getProperty(person, "name");
console.log(personName);
  • 映射类型:可以根据已有的类型创建新的类型。就像是你有一个模板,然后按照这个模板复制出一些新的东西,还可以对复制的东西做一些修改。
interface User {name: string;age: number;
}// 创建一个新类型,把 User 类型的所有属性变成可选的
type PartialUser = {[P in keyof User]?: User[P];
};let partialUser: PartialUser = { name: "Bob" };
console.log(partialUser);
装饰器

装饰器就像是给类、方法、属性等添加一些额外的功能,就像给房子装修一样,让它们变得更强大。

// 定义一个装饰器函数
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {const originalMethod = descriptor.value;descriptor.value = function (...args: any[]) {console.log(`Calling method ${propertyKey} with arguments: ${JSON.stringify(args)}`);const result = originalMethod.apply(this, args);console.log(`Method ${propertyKey} returned: ${result}`);return result;};return descriptor;
}class Calculator {@logadd(a: number, b: number) {return a + b;}
}let calculator = new Calculator();
let result = calculator.add(2, 3);
console.log(result);

在这个例子中,log 就是一个装饰器,它可以在调用 add 方法前后输出一些日志信息,方便我们调试和监控。


文章转载自:

http://qAI8JrbG.hhsqn.cn
http://OI8MS3Tu.hhsqn.cn
http://9sHMVa9R.hhsqn.cn
http://HCU3SWyw.hhsqn.cn
http://XmD1AfIy.hhsqn.cn
http://8YyS8G7m.hhsqn.cn
http://w1nSjuAm.hhsqn.cn
http://itj3rcEQ.hhsqn.cn
http://rU8GohtO.hhsqn.cn
http://gFZn1FdT.hhsqn.cn
http://GD3hFruB.hhsqn.cn
http://pHJ4vwzm.hhsqn.cn
http://joVSbNuy.hhsqn.cn
http://dScpLr8U.hhsqn.cn
http://4c5ZRl2b.hhsqn.cn
http://ZKxlHv22.hhsqn.cn
http://RNlHBz12.hhsqn.cn
http://OxBMpfRJ.hhsqn.cn
http://2qE5s51j.hhsqn.cn
http://zL6uSPMw.hhsqn.cn
http://HO7bgPLT.hhsqn.cn
http://ToaUuJvn.hhsqn.cn
http://ib9OERik.hhsqn.cn
http://wAobKC87.hhsqn.cn
http://8LM2LbcC.hhsqn.cn
http://zNdWOBhf.hhsqn.cn
http://rv2KPjjU.hhsqn.cn
http://B5ZDbjy6.hhsqn.cn
http://hOakCHwP.hhsqn.cn
http://YLtY4QnH.hhsqn.cn
http://www.dtcms.com/wzjs/738822.html

相关文章:

  • 国外网页游戏网站合肥建站企业
  • 护肤品网站建设方案电商网站制作流程图
  • 网站设计简单吗汕头中小企业网站制作
  • 福建建设局网站织梦网站被植入广告
  • 酒店网站 方案网站建设技术分为哪些方向
  • wordpress网站不稳定平邑建设银行网站
  • 北京外包做网站如何报价南宁做网站优化的公司
  • 机关门户网站建设要求重庆建筑特种作业查询网
  • 青海省城乡建设信息官官方网站凡客诚品羽绒服
  • 教育网站制作多少费用wordpress还原数据库备份
  • 墟沟企业建站价格表域名备案服务
  • 国内最专业的设计网站建设济南网约车公司
  • 青岛网站建设公司有哪些建外贸商城网站
  • 要如何自己创建一个网站潞电建设公司官网
  • 网站开发与微信对接邵武建设局网站
  • php 手机网站开发中国上海官网
  • iis7.5 没有默认网站学生制作网站建设 维护
  • 网站制作 企业网站建设哪家好如何做网站帮别人赚钱
  • 中国空间站进展php是专门做网站的
  • 即墨建设局网站大连seo优化
  • 上海做网站比较好的公司有哪些菏泽建设公司网站
  • 手机商城网站模板个人建设网站难吗
  • 网站怎么做图片放映效果成都程序员培训机构
  • 郑州市做网站的公司建网站的流程及注意事项
  • 舟山网站建设费用维护一个网站难吗
  • 聊城招聘网站建设优秀的手机网站
  • 公司网站 百度成都建设网站那个好
  • 大型电子商务网站建设公司宁夏免费建个人网站
  • 怎么提升网站排名广东深圳最近出什么事了
  • 高唐做创建网站的公司做网站傻瓜软件