安装ts
npm install -g typescript
查看ts版本
tsc -v
将ts文件转为js文件
tsc 文件名.ts
执行js文件
node 文件名.js
ts包含的数据类型如下:
any 任意类型
当该变量的类型不确定时,可以定义为any
声明为any的变量可以赋予任意类型的值
let x: any
x = 1
x = 'hello'
console.log(x) //hello
-----------------------------
let arrayList: any[] = [1, false, 'fine']
arrayList[1] = 100
console.log(arrayList) //[ 1, 100, 'fine' ] number 数字类型
let n: number = 1
console.log(n) //1
```
string 字符串类型
let s: string = 'hello,ts!'
console.log(s) //hello,ts!
boolean 布尔类型
let flag: boolean = true
if (flag) {console.log('hello') //hello
} else {console.log('ts')
}
null 表示对象值缺失,空对象引用
undefined 用于初始化变量为一个未定义的值
console.log(typeof null) //object
console.log(typeof undefined) //undefined
null和undefined是其他类型的字类型,可以赋值给其他类型
此时赋值后的类型会变为null或undefined 但是当ts开启了严格的空校验strictNullChecks特性后
let y: number
y = undefined //会提示不能将类型“undefined”分配给“number”
y = null //会提示不能将类型“null”分配给“number”如果一个类型可能出现 null 或 undefined, 可以用 | 来支持多种类型
let y: number|null|undefined
数组类型
方式一:在元素类型后面加上[]
let arr: number[] = [12, 23, 34]
方式二:使用数组泛型
let arr2: Array = ['hello', 'ts', 'haha']console.log(arr, arr2) //[ 12, 23, 34 ] [ 'hello', 'ts', 'haha' ]
元组
用来表示已知元素数量和类型的数组,各元素的类型不必相同,但对应位置的类型需要相同
几数量和类型有限的数组
let yuanzu: [number, string, boolean] = [1, '123', true]
console.log(yuanzu) //[ 1, '123', true ]
enum 枚举 用于定义数组集合
默认情况下,从0开始为元素编号
当red=3时,表示从3开始为元素编号
enum Color {// red,red = 3,pink,blue
}
let r: Color = Color.red
let p: Color = Color.pink
let b: Color = Color.blue
// 当red没赋值时,打印结果为 0 1 2
console.log(r, p, b)
// 当red没赋值3时,打印结果为 3 4 5
red 的值是被计算出来的。注意注释部分,如果某个属性的值是计算出来的,那么它后面一位的成员必须要初始化值。function getValue() {return 3
}
enum Color {red = getValue(),pink = 6,// 此处必须要初始化值,不然编译不通过blue
}
let r: Color = Color.red
let p: Color = Color.pink
let b: Color = Color.blueconsole.log(r, p, b) //3 6 7可以根据枚举的值可到名字
console.log(Color[6]) //'pink'
void 用于标识方法返回值的类型, 表示该方法没有返回值
function sayHi(): void {console.log('hi!')
}
sayHi()
never
never是其他类型的字类型,代表从不会出现的值
这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环)
ts变量命名规则:变量名称可以包含(数字、字母、$美元符号、_下划线),不能以数字开头
可以使用以下四种方式来声明变量:
var a //声明变量,但没设置类型和初始值,类型可以是任意类型,默认初始值为undefined
var b: number //声明变量,有类型,但没初始值,默认初始值为undefined
var c = 'hello' //声明变量,有初始值,但没类型,该变量可以是任意类型
var d: boolean = true //声明变量,有初始值,有类型
当没有给出变量的类型时,ts编译器会利用类型推断来推断类型
var num=2 //var num: number
num='123'//编译错误 不能将类型“string”分配给类型“number”。
如果由于缺乏声明而不能推断出类型,那么此变量的类型为any类型
var a //var a: any
a=1
a='123'
var e = 1 //全局变量
class Numbers {// 类变量(实例变量,静态变量)在类里面,方法的外面。可通过类的对象访问到f = 2 //实例变量static g = 3 //静态变量,静态变量可以通过类型直接访问h(): void {var i = 4 //局部变量console.log('i', i)}
}
console.log(e) //1
var obj = new Numbers()
console.log(obj.f) //2
obj.h() //i 4
console.log(Numbers.g) //3
算术运算符
+ 加
- 减
* 乘
/ 除
% 取模(余数)
++ 自增
-- 自减
关系运算符
==
!==
>
>=
<
<=
逻辑运算符
&& and
|| or
! not取反
短路运算符
&&
||
位运算符(不懂,没怎么用过)
&
|
~
^
<<
>>
>>>
赋值运算符
=
+=
-+
*=
/=
三元运算符
a?b:c
类型运算符
typeof
instanceof
其他运算符
负号运算符(-)
var x: number = 1
var y = -x
console.log(x, y) //1 -1
字符串运算符:连接运算符(+)
var str: string = 'hello,' + 'ts'
console.log(str) //'hello,ts'
if
else
else if
switch case
for()
for...in
for...of
forEach
every
some
while
do...while
break语句
continue语句
无限循环for(;;){}while(true){}
函数定义与函数调用
function test(){console.log(111)
}
test()
函数返回值
将函数执行结果返回到调用它的地方
function function_name():return_type{return value
}
带参数函数
function add(x: number, y: number): number {return x + y
}
console.log(add(1, 3)) //4
可选参数
可选参数使用?标识
可选参数必须跟在必选参数后面
function add(x: number, y: number, z?: number): number {if (z) {return x + y + z} else {return x + y}
}
console.log(add(1, 3)) //4
console.log(add(1, 4, -1)) //4
默认参数
调用该函数时如果未传入该参数就使用该参数的默认值
function add(x: number, y: number, z: number = 10): number {return x + y + z
}
console.log(add(1, 3)) //14
console.log(add(1, 4, -1)) //4
注意参数不能同时设为可选和默认
剩余参数
function str(x: string, y: string, ...z: string[]) {console.log(x) //'hello'console.log(y) //'hi'console.log(z) //[ 'ym', 'haha', 'xixi' ]
}
str('hello', 'hi', 'ym', 'haha', 'xixi')
function getSum(...numbers: number[]): number {var sum = 0for (var i = 0; i < numbers.length; i++) {sum += numbers[i]}return sum
}
console.log(getSum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) //55
匿名函数
var fun=function(){}
构造函数
new Function()
递归函数,即在函数内调用函数本身,抽时间好好学学!!!
Lambda函数,也称为箭头函数
var fun=()=>{}
参考js,好好复习一下!!!
通过管道符|将变量设置多种类型
var x:number|number[]
也可将联合类型作为函数参数使用
function fun(x:number|number[]){}
参考js
定义了一个接口 IPerson,接着定义了一个变量 customer,它的类型是 IPerson。
interface IPerson {firstName: stringlastName: stringsayHi: () => string
}var customer: IPerson = {firstName: 'y',lastName: 'm',sayHi: (): string => {return 'hello'}
}
console.log(customer.firstName) //'y'
console.log(customer.lastName) // 'm'
console.log(customer.sayHi()) //'hello'
可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。
interface nameList {[index: number]: string
}
var list: nameList = ['apple', 'huawei', 'vivo']
接口继承
Child_interface_name extends super_interface_name
看不懂……