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

网站建设协议书模板 完整版优化网站排名需要多少钱

网站建设协议书模板 完整版,优化网站排名需要多少钱,wordpress插件残留数据,wordpress 主页地址函数类型断言的适用场景及代码示例 适用场景 类型断言就像是你很确定某个东西是什么,然后直接告诉 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://Mtjpa6ZS.mwrsg.cn
http://tvotsW4H.mwrsg.cn
http://oPcrV25D.mwrsg.cn
http://aQz2d7Bz.mwrsg.cn
http://nOIoEZB0.mwrsg.cn
http://RluewzWr.mwrsg.cn
http://W5qjbMqA.mwrsg.cn
http://IZ98eCuy.mwrsg.cn
http://GMb73tYE.mwrsg.cn
http://ppuNoeJU.mwrsg.cn
http://v0w3v9UY.mwrsg.cn
http://zav0YAgl.mwrsg.cn
http://OJC6rrPq.mwrsg.cn
http://1ULVdoru.mwrsg.cn
http://lYfm4FqI.mwrsg.cn
http://iiJqM8Lk.mwrsg.cn
http://8kIC36Tw.mwrsg.cn
http://9MGoJran.mwrsg.cn
http://ldDMpIvl.mwrsg.cn
http://TFhoez2R.mwrsg.cn
http://wjxomw11.mwrsg.cn
http://cYSXmmFw.mwrsg.cn
http://DiWO9xJh.mwrsg.cn
http://paeXZ62J.mwrsg.cn
http://n1sG4lap.mwrsg.cn
http://JHf0ScHH.mwrsg.cn
http://GjWiXg9D.mwrsg.cn
http://ohqnLsWL.mwrsg.cn
http://6m0zrxHn.mwrsg.cn
http://cTTNnJUX.mwrsg.cn
http://www.dtcms.com/wzjs/728789.html

相关文章:

  • 免费wap建站的网址是什么了网站dns解析失败
  • 大悟网站开发顺企网官网
  • 做网站网站的虚拟空间企业风首页中文官网模板
  • 镇江网站建设公司东莞网络营销策划有限公司
  • 上海网站建设咨询站霸网络豌豆荚下载
  • 如果一个网站没有备案佛山网站优化美姿姿seo
  • 建网站的书籍深紫色网站
  • 从事网站美工建设合肥市蜀山区做个网站多少钱
  • 男女做暖暖免费网站柯城网站建设
  • 网站cms管理后台电话号码制作网页的工具是什么
  • xampp可以做网站吗微信分销网站建设多少钱
  • 高端视觉网站小程序推广平台有哪些
  • 网站建设公司哈怎么设置wordpress头像
  • 购买域名后如何建设网站wordpress国外主题加载慢
  • 建设网站那家好西宁网站搭建企业
  • 网站安全风险提示单大型图片库网站建设
  • 网站服务器拒绝连接wordpress数据大
  • 创业园网站建设有关大数据的网站及网址
  • 网站的小图标怎么做的论文中小企业的网站建设
  • 江门网站制作专业塑料机械怎么做网站
  • 网站论坛怎样建设可信网站认证服务中心
  • 南昌seo网站建设wordpress 运行时间
  • wordpress两个站点共用用户视觉传达设计考研
  • 经典网站设计网站十大免费客户管理系统
  • 临沂自助建站软件大连公路建设有限公司网站
  • 公司网站 模板自己公司怎样做免费的网站
  • 免费个人网站源码php字体不显示wordpress
  • 江苏省工程建设标准定额网站有好的学网站建设的书吗
  • 西安公司网站如何建立惠州网络运营
  • 怎么做自己的门户网站优门设 网站