TypeScript初体验(一)

1、安装TypeScript

npm install -g typescript

2、检查是否安装成功

tsc -V 

3、手动编译代码

tsc helloworld.ts

输出结果为一个 helloworld.js 文件,它包含了和输入文件中相同的 JavsScript 代码。

在命令行上,通过 Node.js 运行这段代码:

node helloworld.js

4、简化运行TS的步骤

使用  ts-node  包,直接在Node.js中执行TS代码

安装命令

npm i -g ts-node

使用方法:

ts-node hello.ts

原理:ts-node命令在内部偷偷的将TS->JS,然后,再运行JS,此命令不会生成JS文件,也不会修改对应的JS文件里的内容

5、类型注解

为变量添加约束,约定了什么类型,就只能给变量赋值该类型的值,否则就会报错。

示例代码:

let age: number = 18

代码中的 : number 就是类型注解

6、常用基础类型

JS已有类型:

原始类型:number/string/boolean/null/undefined/symbol
对象类型:object(包括数组、对象、函数等对象)

TS新增类型

联合类型、自定义类型(类型别名)、接口、元组、字面量类型、枚举、void、any等

7、原始类型

let age: number = 18
let myName: string = '在熙'
let isLoading: boolean = false
let a: null = null
let b: undefined = undefined
let c: symbol = Symbol()

8、数组类型

let num: number[] = [1,2,3]    //推荐
let num4: boolean[] = [false,trun]
let num2: Array = ['a','b','c']   //不推荐
let num3: Array = [1,2,3]

数组中有多种类型,使用到TS中的联合类型   |(竖线)

let arr: (number | string)[] = [1,'a',3,'f']

9、类型别名

为任意类型起别名,简化该类型的使用

用法:使用type关键字来创建类型别名

           类型别名可以是任意合法的变量名称

           创建类型别名后,直接使用该类型别名作为变量的类型注解即可

代码示例:

type CustomArray = (number | string)[]
let arr: CustomArray = [1, 'a', 5, 'e']
let arr2: CustomArray = [1,2,3,'w']

10、函数类型

实际上指的是:函数参数和返回值的类型

单独指定参数和返回值的类型:

function add(num1: number, num2: number): number {
    return num1 + num2
}
const add2 = (num1: number, num2: number): number => {
    return num1 + num2
}

同时指定参数、返回值的类型:

const add3: (num1: number,num2: number)=> number = (num1,num2) => {
    return num1 + num2
}

注意:这种形式只适用于函数表达式

如果函数没有返回值,那么,函数返回值类型为   : void

function greet(name: string): void{
    console.log('我是'+name);
}

可选参数:在可传可不传的参数名称后面添加?(问号)

注意:可选参数只能出现在参数列表的最后

function mySlice(num?: number,num2?: number): void{
    console.log(num,num2);
}
mySlice(1,3)

11、对象类型

let person: { name: string; age: number; sayHi(): void; greet(name: string): void} = {
    name: '张三',
    age: 18,
    sayHi() { },
    greet(name){}
}

多行可以不用加分号分隔

let person: {
    name: string
    age: number
    sayHi: () => void
    greet(name: string): void
} = {
    name: '张三',
    age: 18,
    sayHi() { },
    greet(name){}
}

可选属性:在属性名称后面添加?(问号),与函数的语法一致

function myAxios(config: { url: string; method?: string }) { }
myAxios({
    url: ''
})

12、接口

当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的

用法:

1、使用interface关键字来声明接口

2、接口名称可以是任意合法的变量名称

3、声明接口后,直接使用接口名称作为变量的类型。

4、因为一行只有一个属性类型,所以属性类型后没有分号

 代码示例:

interface IPerson {
    name: string
    age: number
    sayHi():void
}
let person2: IPerson = {
    name: '张三',
    age: 18,
    sayHi() { }
}

interface(接口)和type(类型别名)的对比:

相同点:都可以给对象指定类型

不同点:

        接口,只能为对象指定类型

        类型别名,不仅可以为对象指定类型,实际上可以为任意类型指定别名

 如果两个接口之间有相同的属性或方法,可以将公共的属性或方法抽离出来,通过继承(extends)来实现复用。

代码示例:

interface Point2D { x: number; y: number }
interface Point3D extends Point2D { z: number }
let p3: Point3D = {
    x: 1,
    y: 2,
    z: 3
}

13、元组

元组类型是另一种类型的数组,他确切的知道包含多少个元素,以及特定索引对应的类型

代码示例:

let position: [number, number] = [30, 29]
let og: [number, string] = [1,'e']

14、类型推论

TS的类型推论机制会帮助提供类型,以下两种场景类型注解可以省略不写:

1、声明变量并初始化时

2、决定函数返回值时

代码示例:

let age = 18

function add(num1: number, num2: number){
    return num1 + num2
}

15、类型断言

解释:

1、使用as关键字实现类型断言

2、关键字as后面的类型是一个更具体的类型

3、查看元素的类型:在浏览器控制台,通过console.dir($0)打印DOM元素,在属性列表的最后面可以看到该元素的类型

 代码示例:

const alink = document.getElementById('link') as HTMLAnchorElement

你可能感兴趣的:(typescript,javascript,前端)