Typescript-Day1

145 阅读5分钟

一:typescript环境搭建

1:下载node.js

2:使用npm全局安装typescript npm i -g typescript

3:创建应该TS文件 执行 node index.ts

4:使用tsc对文件进行编译 在终端中执行 tsc index.ts 就会将index.ts 转换成 index.js

二:简单的typescript语法

1申明变量

1:申明变量赋值

// 申明一个变量a,指定类型为nuber
// let 变量名:类型;
let a:number;

// 赋值成功
a=0;
// 赋值失败
a='hello';

// 申明变量直接赋值
let b : boolean=false;

// fu(参数1:类型,参数2:类型):fn返回值类型{}
function sum( a:number , b:number) : number {
    return a+b;
}

2:ts自动类型判断

ts拥有自动判断类型机制 当对变量的声明和赋值同时进行时ts编译器就可自动判断变量类型 所以声明和变量同时进行时就可省略类型的声明

let a:Number=2;

let b=2;

3:类型

标题标题标题
number1,-1,3.5任意数字
string'hi',"hi",his
booleantrue,false布尔值
object{name:'tsy'}js对象
array[1,2,3]js数组
tuple[1,2]ts新增类型,固定长度的数组
any*任意值
unknown*类型安全的any
void空值(undefined)没有值或者undefined
never没有值不能是任何值
enumenum{a,b}枚举,ts新增类型
字面量其本身限制变量的值就是字面量的值

.numder

除了整数和浮点数外还可以是进制表示

let a : number = 10;
let b : number = 0xf00d;

.string

let color: string = "blue";
color = 'red';
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${fullName}.

I'll be ${age + 1} years old next month.`;

.boolean

let isA:boolean=true;

.字面量

可以使用字面量指定变量的类型,和字面量的取值范围

// num的值只能在1或2或3取值
let num:1|2|3;

// color的值只能在red或pink或black
let color:'red'|'pink'|'black';

// a的类型可以是number或string
let a:number|string;

.any

任意值(不安全,少用),相当于typescript关闭了检测类型

let a:any;
a=1;
a='1';
a=true

.unknown 任意值 (安全)

let a:any;
a=1;
a='1';
a=true

any和unknown的区别 两个虽然都是可以赋任意值,主要any可以赋值给其他类型的变量。而unknown不能赋值给已经确定类型的变量

let a:unknown;
let b:any;
a=1;
b=1;

let c:number;
// 报错
c=a;
// 赋值成功
c=b;

如何解决把unknown的值赋值给其他确定类型的变量呢?

let a:unknown;
a=1;
let c:number;
// 报错
c=a;

// 方法一
if(typeof a==='number' ){
    // 赋值成功
    c=a;
}
// 方法二
// 类型断言
// 赋值成功
c= a as number;
// 方法三
c= <number>a

.void 返回空值或者undefined,多用于函数返回值

function data():void{
}

.never 没有值返回,(和void的区别,viod返回空值或者nudefined,从某种角度上讲空值或者nudefined也算是值,要是真正的没有返回值则是never) 应用场景:多用于报错提醒

function data(): never{
    throw new Error('报错了')
}

.object

//可以用object或者{}来指定对象类型
let a:object;
let b:{};

//给对象里的属性指定类型
let c:{name:string,age:number};
c={ name:'tsy',age:23}

// 给对象里的多个属性指定类型
// {属性名:类型,[属性名变量:类型]:类型}  []代表多个
let d:{name:string,[propName:string]:any}
d={name:'tys',age:22,sex:'男'}

定义特殊对象 fun结构 我想定义一个传两个参数,一个为string,一个为numder,返回值为numder

语法:(形参:类型,形参:类型...)=> 返回值类型

let a:( x:string , y:number ) => number;

a=function(n1:string,n2:number):number{
    return 0;
}

.array

js里数组没有类型的概念。所以什么都能存,数组处理起来会有点麻烦,存储性能比较低。

通常一般在开发在一个数组都存一个类型的值

此声明数组就是声明什么类型的数组

/ 类型[]
// Array<类型>
let x:string[];
x=['t','s','y']

let y:number[];
y=[1,2,3]

let z:Array<number>
z=[4,5,6]

接下来是ts新增类型

.tuple

元组,即长度固定的数组

// 元组:[类型,类型,类型...]
let x:[string,string,number]
// 结构和数量必须和上面一一对应
x=['s','x',2]

.enum 枚举 什么是枚举,把所有可能的情况列出来, 应用场景:结果需要在多个值之间选择的时候就用枚举。

例如,现在有好几个对象

// 0为女,1为男
let a:{name:string,sex:0|1}

a={
    name:'tsy',
    sex:1
}
// 判断a是男是女
if(a.sex===1){
    console.log('男');
}

如果出现sex不止0和1,还有其他的,是不是就会写 sex:0|1|2|3 可以换一种写法来体现结果需要在多个值之间选择这一特性

/enum 枚举
// 0为女,1为男
enum sexs{
    x=0,
    y=1
}

let a:{name:string,sex:sexs}

a={
    name:'tsy',
    sex:sexs.y
}
// 判断a是男是女
if(a.sex===sexs.y){
    console.log('男');
}

|和&拓展

// 表示x类型为string或number
let x:string|number

有|就有&

// 表示x类型为string且为number
let x:string&number

//这个写法虽然没有报错,但这样写是毫无意义的

那么&要怎么用才有意义

//表示x对象,必须包含name和age且类型为string,number
let x:{name:string}&{age:number}
x={name:'tsy',age:23}

类型别名 应用场景:减少代码重复,提升复用性

// 代码重复
let x:1|2|3|4;
let y:1|2|3|4;

// 代码复用
type myType = 1|2|3|4;

let z:myType;
let i:myType