速学TypeScript-精简划重点手册-下册
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单。
👉前提
非小白文,作者拥有几年编程经验,开发Android和Unity,因当下想开发小游戏学习CocosCreator需要用的TypeScript,所以需要了解下该语言知识。小空会挑重点,简单的回带过甚至不提。
适合做成手册,没事翻翻。
👉实践过程
😜元组
普通数组存储的都是相同类型的数据,而元素拥有存储不同类型的功能。当然排除基础类型里面的any数组:any[]
//元组
let tupleOne = [1, false, "类型可不同"];
//push 添加元素,队列形式
tupleOne.push("添加内容");
tupleOne.push(2);
//删除最后一个元素
tupleOne.pop();
元组可以作为函数的参数,如下操作:
let tupleOne = [1, false, "类型可不同"];
this.methodSeven(tupleOne)
methodSeven(tupleCan: (number | boolean | string)[]) {
}
😜联合类型
小空也是第一次了解到联合类型,从Java和C#角度来考虑,着实有点666。那什么是联合的?说白了就是一个变量可以是字符串也可以是数字,用|帮助声明
//联合类型
let unionOne: string | number | boolean;
let unionTwo: string[] | number[];
unionOne = "联合";
unionOne = 1;
unionOne = false;
this.methodSix(1);
this.methodSix("类型");
//联合类型也可以用在函数参数里面
methodSix(myName: string | number | boolean) {
}
😜命名空间
他的核心目的就是为了解决重名(命名冲突)的问题,比如两个人都叫小空,你怎么区分?你可以分开他们一班的小空,二班的小空。二班的班级要想和一班小空交流就需要一班的同意。
所以上面所述班级用namespace来声明,在类的最外层。其他地方想要访问到里面内容,则需要带有export,也就是允许外面调用获取。这点其实是模块的概念,和Java有异曲同工之妙,引用其他类的内容都需要import,不过TypeScript需要将暴露给外面的变量,函数,类等用关键字export声明。
尤其是中大型应用需要多人开发的时候,每人的开发习惯和命名规则都有些许差异,哪怕公司有了规范文档,总有概率可能重名,利用控件可以有效分开模块开发。
😜泛型
小空作为Android/Unity开发,Java和C#语言中泛型用的挺频繁,她是支持多种类型数据的类型,用起来很灵活,尤其是大型系统或者封装框架的时候。
上面小空刚知道any类型的时候就想到了和泛型很相似,本想着就这么试试,没想到数据存在不对等,并且当使用的多了,什么类型什么变量就很容易混乱,难免出错。还真是上帝为你开一扇门的同时,又为你关闭了一扇窗。
所以还是推荐泛型类型,函数定义以及调用如下:
//泛型函数
methodFan<T>(myName: T): T {
return myName;
}
//泛型函数调用
let fanHanShuOne = this.methodFan("不带指定泛型的");
let fanHanShuTwo = this.methodFan<string>("带指定泛型的");
//还可以是数组形式的泛型
methodFanOne<T>(myName: T[]): T[] {
return myName;
}
methodFanTwo<T>(myName: Array<T>): Array<T> {
return myName;
}
不是如图这样的接口哦
她是抽象方法的一个方案,将一些特征内容抽取出来,然后再让具体的类去实现,好比小时候父母挣钱,孩子花钱。
-
接口和接口的继承是extends,变量继承用英文符号:
-
变量继承建议先给初始值
interface ScriptInterfaceOne {
myNameOne: string;
myNumberStrOne: string[];
//联合类型
unionOne: string | number | boolean;
}
interface ScriptInterfaceTwo {
myNameTwo: string;
myNumberStrTwo: string[];
//联合类型
unionTwo: string | number | boolean;
}
interface ScriptInterfaceThree extends ScriptInterfaceOne, ScriptInterfaceTwo {
myNameThree: string;
myNumberStrThree: string[];
//联合类型
unionThree: string | number | boolean;
}
//接口继承-记得给初始值
let interOne: ScriptInterfaceOne = {myNameOne: "名字", unionOne: "联合", myNumberStrOne: ["1", "2"]};
interOne.myNameOne = "";
interOne.unionOne = "接口的联合";
//接口是可以继承多个的 接口与接口的继承用关键字extends 变量继承用英文符号 :
let interThree: ScriptInterfaceThree = {
myNameOne: "名字", unionOne: "联合", myNumberStrOne: ["1", "2"],
myNameTwo: "名字", unionTwo: "联合", myNumberStrTwo: ["1", "2"],
myNameThree: "名字", unionThree: "联合", myNumberStrThree: ["1", "2"]
};
😜类
l 类是和接口有区别,只能单个继承,即类A只能继承类B或类C,不能类B和类A同时继承,但是可以套娃继承 类B继承类C,类A再继承类B,这样类A也有C的属性。
l 类的构造函数只有一个,否则出错。
l 子类可访问父类里面的属性和重写父类方法。
l 类可以实现接口,用implenments,类的继承用extends。
l 类默认是public公有可见的,而Java和C#默认是非公有的。
l 抽象类和Java一致,关键词abstract和extends,且派生类必须实现抽象类内的方法
instanceof 运算符用于判断对象是否是指定的类型,如果是返回 true,否则返回 false。
//instanceof关键字判断变量是否是对应的类型
let isType = lei instanceof ScriptLei;
//正常的普通的类
class ScriptLei implements ScriptInterfaceTwo {
private _myName: string | null = null;
private _myAge: number | null = null;
set myName(value: string | null) {
this._myName = value;
}
set myAge(value: number | null) {
this._myAge = value;
}
get myName(): string | null {
return this._myName;
}
get myAge(): number | null {
return this._myAge;
}
constructor() {
}
private _myNameTwo: string | null = null;
private _myNumberStrTwo: string[] | null = null;
private _unionTwo: string | number | boolean | null = null;
get myNameTwo(): string | null {
return this._myNameTwo;
}
set myNameTwo(value: string | null) {
this._myNameTwo = value;
}
get myNumberStrTwo(): string[] | null {
return this._myNumberStrTwo;
}
set myNumberStrTwo(value: string[] | null) {
this._myNumberStrTwo = value;
}
get unionTwo(): string | number | boolean | null {
return this._unionTwo;
}
set unionTwo(value: string | number | boolean | null) {
this._unionTwo = value;
}
}
//调用类
let lei = new ScriptLei();
lei.myName = "我的名字";
lei.myAge = 18;
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢欢迎点赞👍收藏🌟留言📝
- 点赞
- 收藏
- 关注作者
评论(0)