欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TypeScript基本类型

程序员文章站 2022-07-12 16:30:23
...

一、number | string | boolean

TS的Number | String | Boolean和JS的差不多

// 声明一个变量A,指定为number类型
let a: number;

// 只能为数字,否则ts报错 但是开始可以编译成js
a = 10;
// a = 'a'
// 声明完变量就直接进行赋值(用的不多)
let c: boolean = false;

ts => js 可以编译成任何版本的js,默认编译版本为ES3
作用:确保代码有最好的兼容性,在不同的浏览器版本都可以正常的执行

类型推论
如果变量的声明和赋值是同时进行的,ts可以自动对变量进行类型检测

let d = false;
d = true

JS中的函数是不考虑参数的类型和个数的,因此会造成安全隐患

function sum1(a, b) {
    return a + b;
}
console.log(sum1(1, 2)); // 3
console.log(sum1(1, '2')); // 12

使用ts加上类型声明 后面加上:number

function sum2(a: number, b: number) : number {
    return a + b;
}
let result = sum2(1, 2) // 此时result可看出是number类型
// sum2(1, '2') 此时会报错 传值传多传少也会报错

二、字面量

使用字面量进行类型声明

let a: 10;
a = 10;

用 | 来连接多个类型(联合类型

let b: "male" | "female";
b = "male";
b = "female";

let c: boolean | string;
c = true;
c = "hello"

三、any

any 表示任意类型 设置any后相当于对该变量关闭了TS的类型检测

注意:使用TS时,不建议使用any类型 能用unknown就不要用any

let d: any;
// 声明变量如果不指定类型,则TS解析器会自动判断变量的类型为any(隐式的any)
let e;
d = 10;
d = "hello";
d = true;

// d的类型是any,它可以赋值给任意变量
let s: string;
s = d;

四、unknown

unknown 表示位置类型的值 实际上是一个类型安全any

let f: unknown;
f = 10;
f = "hello"

anyunknown的区别

// unknown不能直接赋值给别的变量,any可以
let s: string;
// s = f;

判断类型是否一致,如下:

if (typeof f === "string") {
    s = f;
}

也可以使用类型断言:告诉解析器变量的实际类型

  • 语法:变量 as 类型,<类型>变量
s = f as string;
s = <string>f;

五、void和never

void 用来表示,以函数为例,就表示没有返回值的函数

return; return undefined/null 都表示没有返回值

function fn1(): void {}

never 表示永远不会返回结果 (不常用

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

六、object

下列在开发中很少使用,因为在js里的对象太多了——一切皆对象

let a: object;
a = {};
a = function () {};

下列建议使用

  • 加上类型限制 {} 里用来指定对象中可以包含哪些属性
  • ? 表示属性可选
let b: {name: string, age?: number};
b = {name: 'wan'} // {}里面的属性多了少了都不行

设置对象结构的类型声明:

// [propName: string]: any 表示任意类型的属性 其中propName为自定义属性
let c: {name: string,[propName: string]: any};
c = {name: 'wan', age: 21, gender: '女', check: true}

设置函数结构的类型声明:

  • 语法:(形参: 类型, 形参: 类型 …) => 返回值
let d: (a: number, b:number) => number;
d = function (n1,n2): number {
    return 1;
}

& 表示 用于连接对象等

let i: {name: string} & {age: number};
i = {name: 'wan', age: 19};

类型的别名(简化类型的使用

type myType = 1 | 2 | 3;
let j: myType;
j = 3;

七、array和tuple

数组的类型声明:

  • 语法:类型[],Array<类型>
let e: string[];
let f: Array<number>;

元组tuple 用来固定长度的数组(存储效率比数组好一点

let g: [string, string];
g = ['a', 'b']; // 参数也是不能多不能少

八、enum(枚举)

enum Gender {
    Female, // 默认第一个参数Female为0 Male为1
    Male
}
let h: {name: string, gender: Gender};
h = {
    name: 'wan',
    gender: Gender.Male
}
console.log(h.gender === Gender.Male);