typeScript
- 编译
tsc 文件名
- 监视编译加
-w
tsc
会全部编译,但前提需要创建tsconfig.json
文件
数据类型的限制
类型 | |
---|---|
number | let n: number |
string | |
boolean | |
字面量 | let s: boolean |
any(不推荐) | |
unknown(比any安全) | |
void | |
never(一般用于报错,很少用) | |
object(不常用,常用{} 对属性进行限制) | |
{ } | |
function(不常用,常用() 对参数进行限制) | |
( ) | |
array | let n: string[] 或者 let n: Array<string> |
tuple( 限制了类型和数量 ) | let n: [string, number] |
enum | enum Gender{Male=0,Female=1} |
-
字面量声明(联合声明):提供选择的范围
let n: 10 | 11; let s: boolean | string
-
声明和赋值同时进行时,可省略
let c = 1
-
所以ts的类型限制多用于函数
()
外是对返回值的类型限制
function(a: number, b: string): number {}
-
any和unknow的区别
- any的值可以随意给其他变量赋值,unknown不能
-
类型断言
- 一般用于unknow,指明该类型
let e:unknow; let s:string; e = 'hello' s = e as string //写法一 s = <string> e //写法二
-
对象限制
-
对象内的参数需要一一对应
-
加?表示可有可无
-
如果有多个属性
let c:{ name:string, [xx:string]:any //只要是string类型的属性都可有可无 }
let b: { name:string, age?:number // 加?表示可有可无 }
-
-
函数限制
let d:(a: number, b:number)=> number;
-
枚举
有多个值需要选择
enum Gender{ Male=0, Female=1 } let i:{ name:string gender:Gender } i={ name:'bob', gender:Gender.Male //更语义化 }
-
别名type
-
当使用聚合声明时,值太多了可以使用type声明一个别名
type a=1|2|3|4 type a=number|string
-
tsconfig.json
**
代表人一文件夹,`*``代表任一文件
{
//编译src下的所有文件夹的所有文件
"include":[
"./src/**/*"
],
//不编译src下的hello文件夹的所有文件
"exclude":[
"./src/hello/*"
],
//继承其他配置文件
"extends":"./config/base",
//只编译以下文件
"files":[]
}
类
-
继承后,如果使用constructor,必须super(),并且参数也要保持一直
-
抽象类:class 前加 abstract ,抽象类只能被继承,不能被实例化
-
接口:和type有点像,可以去限制类的结构,使用
implements
去实现接口- type不能重名覆盖,接口可以
- 接口中的属性不能有实际的值
interface 接口名{ name:string; age:number; }
-
私有:private
private name:string;
-
泛型(不确定的类型):
- 在定义类或函数时,类型不明确
class A<T>{ name:T; constructor(name:T){ } }
function fn<泛型名>(a:泛型名):T{ return a }
-
如何指定类型
fn(10) //简写,自动推断
fn<string>('hello') //推荐写法
-
可以指定多个
function fn<T,K>(a:T,b:K):T{ return a }
-
还可以继承interface去限制参数或返回值(对象类型)
interface Inter{ length:number } function fn<T extends Inter>(a:T):T{ return a } // a必须有number类型的length属性