/*
代码总仓储:https://github.com/xiaoli0510/typescript
基础类型代码仓库:https://github.com/xiaoli0510/typescript/blob/main/basicType.ts
一:基础类型
1.布尔值boolean;
let isDone:boolean=false;
2.数字number;
let decLiteral:number=6;
3.字符串string;
let name:string="jame";
4.数组:[];
let list:number[]=[1,2]或者let list:Array<number>=[1,2];
5.元组:Tuple(表示一个已知元素数量和类型的数组,各元素的类型不必相同);
let x:[string,number]=['a',1];
6.枚举:enum;(默认情况下是从0开始编号,也可手动指定成员的数值,获取的值是编号,编号默认从1开始)
enum Color {Red,Green,Blue};
let c:Color=Color.Green;//1
let d:string=Color[1];//Grren;
7.任意值:any;在编程阶段不清楚类型的变量指定一个类型,来自于动态的内容,比如用户输入等。此时,不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查,使用any类型来标记这些变量。
let notSure:any=4;
8.空值:void;常用来表示函数的返回值为空的情况,声明一个void类型的变量只能为它赋值为null或者undefined;
9.null和undefined;null和undefined是所有类型的子类型。
10.Never:表示那些永不存在的值的类型。never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。never是所有类型的子类型,但是没有类型是never的子类型或者能赋值给never类型。
ps:赋值的类型与声明的类型不一致时,会报错,但是还是会编译。
11.Object:表示非原始类型,也就是除number|string|boolean|symbol|null|undefined之外的类型。
类型断言;通过类型断言告诉浏览器实体的类型,只在编译阶段起作用,在运行时没有影响。
方式1:使用<>
let someValue:any="this";
let strLength:number=(<string>someValue).length;
方式2:使用as。在Typescipt里使用JSX时只能使用as。
let strLength:number = (someValue as string).length;
变量声明代码仓库:https://github.com/xiaoli0510/typescript/blob/main/variable.ts
二:变量声明;
1.const|let使用的是块级作用域;var使用的是函数作用域。
2.const|let需先声明再使用;var可先使用再声明。
3.var 可多次声明,且最后得到的只有一个;let只能声明一次。
接口代码仓库:https://github.com/xiaoli0510/typescript/blob/main/interface.ts
三:接口interface:
作用是为类型命名和为你的代码或第三方代码定义契约,即描述数据的类型。类型检查器不会检查属性的顺序,只要相应的属性存在并且类型也是对的即可。
1.可选属性:color?:string;使用?来实现,可选属性的作用:对可能存在的属性进行预定义,捕获引用了不存在的属性时的错误。
2.只读属性:readonly x:number;赋值后,不可再更改。ts中有ReadonlyArray<T>类型,可确保数组创建后不能被修改,et ro:ReadonlyArray<number>=[2,3],把ReadonlyArray<T>类型的数据赋值给一个普通数组也不可行,但是可以使用断言重写,a=ro as number[];
readonly vs const:如果数据当做变量使用则使用const,如果数据被当做属性使用则使用readonly。
3.额外的属性检查:当数据被赋值给变量或者当做参数时,对象字面量会被特殊对待而且会经过额外属性检查;使用接口定义可解决此问题。
4.接口定义函数类型:对于函数类型的类型检查来说,函数的参数名不需要与接口里面定义的名字相匹配。函数的返回值类型可不指定,ts的类型系统会推断出函数的返回值类型。
interface SearchFunc {
(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string):boolean {
let result = source.search(subString);
return result > -1;
}
5.可索引的类型:支持的索引名的类型有string和number,会自动将number转换为string。
interface StringArray {
[index: number]: string;
}
可将索引设置为只读,来防止给索引赋值。
6.实现接口:在接口里描述一个方法,在类里面去实现,使用implements。当一个类实现接口时,只对其实例部分进行检查。
7.接口继承接口使用extends,可继承多个接口。
8.混合类型:一个接口对象同时作为函数和对象使用,并带有额外的属性。
9.接口继承类:使用extends,当一个接口继承类类型时,接口会继承类的所有成员单不包括其实现;当一个接口继承了类的私有属性或者受保护属性时,这个接口类型只能被这个类或者这个类的子类来实现。
*/