学习目标:
从零开始学习Typescript
每天记录学习Typescript的内容和遇到的问题
第一天:
1、Typescript安装
npm install -g typescript
或者
cnpm install -g typescript
检查是否安装成功
tsc -v
2、Typescript编译
1、 创建ts管理文件(tsconfig.json)
tsc -init
2、 修改“outDir”的地址,代表生成的js文件地址
3、 点击vscode上方操作栏>终端>运行任务>typescript>tsc监视
3、Typescript中的数据类型
typescript中为了使编写的代码更加规范,有利于维护,增加了类型校验
注意: 当变量定义为某种类型后,如果赋值成其他类型或导致编译报错
- 数字类型(Number)
let a: Number=1
- 布尔类型(Boolean)
let a: Boolean=true
let a = true;
var b= false;
const c = true;
let d:boolean = true;
let e:true=true;//这是一个类型只为true的布尔类型
let f:true = false;
1、可以让TtypeScript推导出值的类型为boolean(a和b)。
2、可以让typeScript推导出值为某个具体的布尔值(c)。
3、可以明确告诉typeScript,值的类型为boolean(d)。
4、可以明确告诉typeScript,值为某个具体的布尔值(e和f)。
- 字符串类型(String)
let a: String='asdfg'
- 数组类型(Array)
let a: Number[]=[1,2,3,4,5]
或者let a: String[]=['q','j','g','f','x',]
第二种定义数组类型的方法
let arr:Array=[1,2,3,4,5]
- 元组类型(Tuple)
let a:[String,Number,Boolean,Number]=['asd',2,true,6]
元组类型属于数组的一种,定义的数据类型是后面赋值的相同顺序,不可变更
- 枚举类型(Enum)
主要用于标识状态或者一些定义的固定值
enum Flag{success=1,error=2}
let f:Flag = Flag.success //1
如果没有给定义的枚举类型赋值,那么获取到的就是当前枚举的索引值(从0开始),如果有定义的就赋值定义的值,如果下一个仍然没有定义,那么打印上一个值之后的索引值,前一个必须是number
enum Color{red,blue=5,orange};
let c:Color = Color.blue //5
let r:Color = Color.red //0
let o:Color = Color.orange//6
- 任意类型(Any)
let a: any=1
任意类型可以赋值任何类型不受限制
具体使用场景
let oBox:any = document.getElementById("box");
oBox.style.color = "red"
- null和undefined
let a: String | undefined | null;
null和undefined 其他(never类型)数据类型的子类型
- void类型
void标识没有任何类型,一般用于定义方法的时候没有返回值的状况
function run():void{
console.log('run')
}
run()
- never类型
代表从不会出现的值,也就意味着声明never的变量只能被never类型所赋值,不常用
let a:undefined;
a=undefined//可以
let b:never;
b=(()=>{
throw new Error("error")
})()
- Unknow类型
少数情况下,如果你确定无法预知一个值的类型,不要使用any,应该使用unknow,与any类似,它也表示任何值,但是typescript会要求再做检查,细化类型
let a :unknown = 30 //unknown
let b = a === 123 //boolean
let c = a+10 // error错误
if(typeof a==='number'){
let d = a+10 //number
}
1、TypeScript不会把任何值推导为unknown类型,必须显式注解(a)。
2、unknown类型的值可以比较(b)。
3、执行操作时候不能假定unknown类型的值为某种特定类型(c),必须先向TypeScript证明一个值却是是某个类型(d)。
- 对象
typeScript的对象类型表示对象的结构,但是注意通过对象类型是无法区分不同的简单对象或复杂对象
let c:{
firstName:string,
lastName:string
}={
firstName:"john",
lastName:"Azo"
}
class Person{
constructor(
public firstName:string,//public是this.firstName = firstName的简写
public lastName:string
){}
run():string{
return this.firstName+this.lastName;
}
}
let d = new Person("madd","Azdadow")
console.log(d.run());
索引签名
通过这种方式可以告诉typeScript,指定的对象可能有更多的键,这种语法的意思是:“在这个对象中,类型T的键对应的值为U类型”
**注意:**又一项规则非常重要,键的类型必须赋值给number或者string!!!
let jalskdfjlajflajf:{
[lakjsdflanumbner:number]:string
}={
1:"adadad",
6:"saffsdf"
};
console.log(jalskdfjlajflajf[1]);
遇到的问题:
1、当定义变量或者方法的类型时候,类型的英文写成首字母大写就没问题(String)
,如果有的时候某一个小写的(string)就有问题,编译会报错,但是不影响程序的执行,目前尚不清楚原因
2、public是this.firstName = firstName的简写,这个是哪一地方出现的规则?
3、object和Object的区别