TypeScript之基础(一)

122 阅读3分钟

TypeScript介绍

什么是TypeScript

typeScript是javaScript的超集,因为它扩展了JavaScript,有JavaScript没有的东西。

为什么需要TypeScript?

简单来说就是因为JavaScript是弱类型, 很多错误只有在运行时才会被发现,而TypeScript提供了一套静态检测机制, 可以帮助我们在编译时就发现错误

TypeScript的特点

  • 支持最新的JavaScript新特特性
  • 支持代码静态检查
  • 支持诸如C,C++,Java,Go等后端语言中的特性 (枚举、泛型、类型转换、命名空间、声明文件、类、接口等)

基础数据类型

let str: string = "cindy"; 
let num: number = 18; 
let bool: boolean = false; 
let u: undefined = undefined; 
let n: null = null; 
let obj: object = {x: 1}; 
let big: bigint = 100n; 
let sym: symbol = Symbol("me");

null和undefined

默认情况下null和undefined是所有类型的子类型,也就是说你可以把null和undefined赋值给任意类型。

其他类型

Array

let arr:string[]=['1','2']
let arr:Array<string>=['1','2']
let arr:(number | string)[]=[1,'cindy',2,'amy']

函数

函数声明

function sum(x:number,y:number):number{
    return x + y
}

函数表达式

let mySum: (x: number, y: number) => number = function (x: number, y: number): number { return x + y; };

接口定义函数类型

interface sum{ (x: number, y: number): number; }

可选参数

【注】可选参数后面不能再出现必选参数

function fullName(firstName:string,lastName?:string) {
    if(lastName){
        return firstName + lastName
    }else {
        return firstName
    }
}
let name1=fullName('cindy','zhang')
let name2=fullName('amy','li')

默认参数

function fullName(firstName:string,lastName:string='zhang') {
    if(lastName){
        return firstName + lastName
    }else {
        return firstName
    }
}

函数重载

函数重载或方法重载是使用相同名称和不同参数数量或类型创建多个方法的一种能力

元组

特性:元组最重要的特性是可以限制数组元素的个数和类型,它特别适合用来实现多值返回。 【注】如果一个数组数量和类型都不确定的话,那就直接any[]

let x: [string, number];
x=['hello',2] // ok
x=['hello','hello',2] // error
x=[2,'hello'] // error

void

void表示没有任何类型,和其他类型是平等关系,不能直接赋值:

你只能为它赋予nullundefined(在strictNullChecks未指定为true时)。声明一个void类型的变量没有什么大用,我们一般也只有在函数没有返回值时去声明。

never

never类型表示的是那些永不存在的值的类型。

值会永不存在的两种情况:

  • 如果一个函数执行时抛出了异常,那么这个函数永远不存在返回值(因为抛出异常会直接中断程序运行,这使得程序运行不到返回值那一步,即具有不可达的终点,也就永不存在返回了);
  • 函数中执行无限循环的代码(死循环),使得程序永远无法运行到函数返回值那一步,永不存在返回。 【注】never类型同nullundefined一样,也是任何类型的子类型,也可以赋值给任何类型。 但是never没有子类型

any

在 TypeScript 中,任何类型都可以被归为 any 类型。这让 any 类型成为了类型系统的顶级类型.

在许多场景下,这太宽松了。使用 any 类型,可以很容易地编写类型正确但在运行时有问题的代码。如果我们使用 any 类型,就无法使用 TypeScript 提供的大量的保护机制。请记住,any 是魔鬼!尽量不要用any。