TypeScript基础类型
TypeScript是一种面向对象的编程语言。
TypeScript包含的数据类型
数据类型 | 关键字 |
---|---|
任意类型 | any |
数字类型 | number |
布尔类型 | boolean |
数组类型 | 1、元素类型后加上[] let arr:number[]=[],或者使用泛型let arr:Array=[] |
元组类型 | 元组元素用来表示已知元素数量和类型的数组,let x :[string,number]] |
枚举类型 | enum |
void类型 | 用于标识没有返回值 |
null | 对象缺失 |
undefined | 初始化变量为一个为定义的值 |
never | 其它类型(包括null和undefined)子类型,代表从来不会出现的值 |
Null表示空对象引用,typeof检测null饭回的是object。
Typescript变量声明
- var [变量名] : [类型] = 值;
- var [变量名] : [类型];//初始值为undefined;
- var [变量名] = 值;//任意类型
- var [变量名];//任意类型、任意值
类型断言(Type Assertion)???
类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。<类型>值 或 值 as 类型。
类型转换意味着运行时的支持,断言纯粹是编译时语法???
类型推断
由于缺乏声明不能推断类型,那么类型被视作默认动态any类型。
Typescript函数
函数返回值
function function_name():return_type{return value;}
带参数函数
function function_name(param1[:dataType],param2[:dataType]):return_type{return value;}
可选参数
typeScript函数里,我们定义了参数,则必须传入这些参数,除非将这些参数设置为可选,可选参数使用问号标识?,可选参数必须在参数后面。
function function_name(param1[:dataType],param2?[:dataType]){}
默认参数
参数不能同时设置为可选和默认。
function funcation_name(param1[:type],param2:[type]=default_type){
}
剩余参数???
我们不知道向函数传入多少个参数,这时候可以使用剩余参数来定义。
function function_name(param1:string,…params2:string[]){}
递归函数
Lambda函数
称之为剪头函数。
函数重载
重载是方法名字相同,而参数不同,饭回类型可以相通也可以不同。
每个重载的方法(或构造函数)都必须有一个独一无二的参数类型列表。
参数类型不同:
function disp(string):void;
function disp(number):void;
参数数量不同:
function disp(n1:number):void;
function disp(n1:number,n2:number):void;
参数类型顺序不同:
function disp(n1:number,n2:string):void;
function disp(n2:string,n1:number):void;
TypeScript Number
属性 | 描述 |
---|---|
MAX_VALUE | 最大的数,大于MAX_VALUE值代表Infinity |
MIN_VALUE | 最小的数 ,最接近0的正数。 |
NaN | 非数字值 |
NEGATIVE_INFINITY | 负无穷大 |
POSITIVE_INFINITY | 正无穷大 |
prototype | Number对象的静态属性。 |
constructor | 饭回对创建此对象的Number函数的引入 |
prototype实例
let emp = new ployee(1,‘admin’)
emp.prototype.email = “admin@123.com”
方法 | 描述 |
---|---|
toExponential() | 把对象的值转换为指数计数法 |
toFixed() | 把数字转换为字符串,并针对小数点指定位数 |
toLocaleString() | 把数字转换为字符串,使用本地数字格式顺序 |
toPrecision() | 把数字格式化为指定的长度 |
toString() | 把数字转换为指定基数的字符串 |
valueOf() | 返回一个Number对象的原始数字值 |
TypeScript String
方法 | 描述 |
---|---|
charAt() | 返回指定位置的字符 |
charCodeAt() | 返回指定位置的字符Unicode编码 |
concat() | 连接两个或更多字符串,并返回新的字符串 |
indexOf() | 返回某个指定字符串值在字符串中首次出现的位置 |
lastIndexOf() | 从后向前搜索字符串,并计算位置 |
localeCompare() | 用本地特定的顺序来比较两个字符串 |
match() | 查找找到一个或多个正则表达式的匹配 |
replace() | 替换与正则表达式匹配的子串 |
search() | 检索与正则表达式向匹配的值 |
slice() | 提取字符串的片段,并在新的字符串中返回被提取的部分 |
split() | 把字符串分割为子字符串数组 |
substr() | 从起始索引号提取字符串中指定数目的字符 |
substring() | 提取字符串中两个指定的索引号之间的字符 |
toLocaleLowerCase() | 根据主机的语言环境把字符串转为小写 |
toLocaleUpperCase() | 根据主机的语言环境把字符串转为大写 |
toLowerCase() | 字符串转换为小写 |
toString() | 返回字符串 |
toUpperCase() | 字符串转为大写 |
valueOf() | 返回指定字符串对象的原始值 |
TypeScript Array(数组)
var array_name[:dataType];
array_name = [val1,val2]
或者:
var array_name[:dataType] = [val1,val2]
数组解构
var arr:number[] = [12,12]
var[x,y] = arr//将数组的两个元素赋值给变量x和y
TypeScript Map对象
Map是ES6中引入的数据结构。
let my = new Map([
[“key1”,“value1”]
])
TypeScript 元组
数组中元素的数据类型都是相同(any[]类型除外),如果存储元素数据类型,需要使用元组。
TypeScript允许元组中的每个元素添加标签,使得元组的含义更加清晰:
let tuple:[id:number,name:string] = [1,“John”]
元组的类型推断
let tuple = [1,‘admin’] as const;
通过as const断言,TypeScript会将元组视为一个不可变的常量元组。
TypeScript联合类型
Type1|Type2|Type3
let val1:string|number
val1 = true
TypeScript 接口
TypeScript是一系列抽象方法的声明
interface interface_name{
}
接口和数组
接口中我们可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。
interface namelist{
[index:number]:string
}
接口继承
接口继承就是说接口可以通过其他接口来扩展自己。
Typescript允许接口继承多个接口。
继承使用关键字extends
单接口继承:
Child_interface_name extends super_interface_name
多接口继承:
Child_interface_name extends super_interface_name1,super_interface_name2
TypeScript类
TypeScript是面向对象的JavaScript。子类只能继承父类,不支持继承多个类,支持多重继承。
类继承之后,子类可以对父类的方法重新定义,这个过程称之为方法的重写。
static关键字用于定义类的数据成员(属性、方法)为静态的,可以直接通过类名调用。
instanceof运算符
判断对象是否为指定的类型。
访问控制修饰符
public (默认):公有,可以在任何地方被访问。
protected:受保护,可以被其自身和子类访问。
private:私有,只能被其定义所在的类访问。
TypeScript泛型
泛型是一种编程语言特性,允许在定义函数、类、接口等时使用占位符来表示类型,而不是具体的类型。
泛型标识符
通常使用一些约定俗成的标识符,比如常见的T(表示Type)、U、V等,但实际上你可以使用任何标识符。
T:Type,最常见的泛型类型参数名。
K:表示键(Key)
V:表示值(Value)
E:表示数组元素的泛型类型参数
R:用于表示函数返回值的泛型类型参数
U、V:通常用于表示第二、第三个泛型类型参数。
泛型函数:使用泛型来创建一个可以处理不同类型的函数
泛型类、变量、方法
class class_name{
private value:T;
constructor(value:T){this.value = value;}
vetValue():T{return this.value}
}
泛型与默认值
TypeScript命名空间
命名空间最明确的目的就是解决重名问题。
TypeScript模块
TypeScript模块设计理念是可以更换的组织代码。
模块是在其自身的作用域里执行,并不是在全局作用域,这意味着定义在模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用export导出它们。类似地,我们必须通过import导入其他模块导出的变量、函数、类等。两个模块之间的关系是通过在文件级别上使用import和export建立的。模块使用模块加载器去导入其它的模块。在运动时,模块加载器的作用在执行此模块代码前去查找并执行这个模块的所有依赖。大家最熟知的Javascript模块加载器是服务于Node.js的CommonJS和服务于Web应用的Require.js。此外还有有SystemJs和Webpack。
模块导出使用关键字export关键字
export interface InterfaceName{}
TypeScript声明文件
declare关键字来定义类型。
declare var jQuery:(selector:sting)=>any;