安装ts
1. 安装全局typescript
npm install -g typescript
基础类型、
1. 布尔/数值/字符串
```javascript
const bol: boolean = true;
const num: number = 1024;
const userName: string = "小明";
//字符串模板依旧能用
const str:string=`${userName}`
2. null和undefined
//这两个类型只有 自己
const onlyNull: null = null;
const onlyUndefined: undefined = undefined;
3. function
声明的函数在调用的时候,参数个数要和声明时候的参数个数保持一致
//没有返回值的函数可以用void声明
const fn1 = (param1:string,param2:number): void => {
console.log("我是没有返回值的箭头函数");
};
function f2(param1:string,param2:number):void{
console.log("我是没有返回值的普通函数");
}
//有返回值的箭头函数声明是这样的
const fn3 = (): string => {
return "小月=>"
};
//有返回值的普通函数声明是这样的
function f4():string{
return "小芳fn"
}
//函数表达式的双向限定
//上述fn1其实只对=右侧做了限制,对左侧并没有
//完善一点,可以这样 => 用来表示函数的定义,左输入类型,需要用括号括起来,右输出类型
const fn1:(param1:string,param2:number)=>void = (param1:string,param2:number): void => {
console.log("我是没有返回值的箭头函数");
};
// 函数的可选参数
// 注意可选参数要在确定参数后
function f5(name:string,age?:number):string{
return "冷月心fn"
}
//函数参数默认值
function f6(name:string,age:number=18):string{
return `${name}--${age}`
}
//此时可选参数不必一定在确定参数后,但是调用有问题
function f7(name:string,desc?:string,age:number=18):string{
return `${name}--${age}--${desc}`
}
//剩余参数
function f8(...args:number[]):number[]{
return args
}
console.log(f8(1,2,3,4,5))//[1,2,3,4,5]
4. void声明变量
void也可以用来声明变量,但只能作用在undefined身上,null也不行。只有tsconfig.json中strictNullChecks属性设置为false时,null才能赋值给void
> const u:void=undefined;//这是个鸡肋用法,基本不会这么用 const n:void=null;//这样会报错
> const age:void=18;//这样也会报错
5. symbol
symbol使用依赖es6编译辅助库 ,tsconfig.json lib[“es6”]
const sym1:symbol = Symbol();
const sym2:symbol = Symbol();
console.log(sym1===sym2)//false
6. bigint
bigint可以安全地存储和操作大整数, 目前兼容性不是很好
// 超出最大整数的计算会超精度,得不到期望值
const max = Number.MAX_SAFE_INTEGER;
const max1 = max + 1
const max2 = max + 2
console.log(max1===max2)// true ,实际应该不相等
// 需要将数值转成BigInt计算,不会超精度,以下为js代码
const big_max = BigInt(Number.MAX_SAFE_INTEGER);
//这里n是bigint的标志,且bigint和number是完全不同的两个类型
//ts中使用bigint,不支持1n,2n,但是可以BigInt(1),BigInt(2)代替
const big_max1 = big_max + 1n
const big_max2 = big_max + 2n
console.log(big_max1 === big_max2) // false 这才是预期结果
任意值
任意值(any/unknown)用来表示允许赋值为任意类型
声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值。
变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型(隐式,noImplicitAny属性可以校验到)
了解后分分钟忘了即可,这不是什么好习惯
- any
//非any类型不可以跨类型赋值
let str1:string="小刘";
str1=123//报错
//any类型可以跨类型赋值,这就像js本身
//注意,这种属于显式声明any类型,tsconfig.json中noImplicitAny属性校验的是隐式
let str2:any="小刘"
str2=123//不报错
2. unknown
```javascript
//any类型下,可以在任意值上访问任何属性,调用任何方法,但是unknown不行
let str3:any="小刘"
str3.say();//不报错
str3.age //不报错
//unknown是更安全的any
let str4:unknown="小刘"
str4.say();//报错
str4.age //报错