类型声明
- 指定TS中变量(参数、形参)的类型
- 当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错
let 变量 : 类型;
function fn(参数: 类型,参数: 类型): 类型 {
...
}
let a: number = 10;
a = 20;
a = 'hello'; //报错
function sum(a: number, b: number): number {
return a + b;
}
sum( 123 , "456") //“456”报错:类型“string”的参数不能赋给类型“number”的参数。
sum( 123 ) //参数数量不对也会报错
自动类型判断
-
对变量的声明和赋值是同时进行的,会自动判断变量的类型(即 可省略掉类型声明)
let c = false;
虽然报错,但是依旧会编译为js文件,后续可配置使其不编译
类型
number、string、boolean、字面量、any、unknown、void、never、object、array、tuple、enum
- 字面量:
//字面量,类似于限制为常量
let a : 10;
a = 10;
a = 11; //报错
//使用|来链接多个类型(联合类型)
let b: 'male' | 'female';
b = 'male' ;
b = 'female';
- any:任意类型,变量可以任意赋值,相当于对此变量关闭了TS的类型检查(不建议使用)
声明变量时如果不指定类型,则TS解析器会自动判断变量的类型为any(隐式的any),可以赋值给其他变量,即会影响其他变量的变量检查
let e;
e = 12;
let str: string;
str = e;
- unknown:表示未知类型的值,区别any:不可直接赋值给其他变量(只嚯嚯自己,不影响别人)
进行变量检查:
//1.
let e: unknown;
e = 12;
let s: string;
if(typeof e === "string") {
s = e;
}
//2.类型断言:告诉解析器变量的实际类型
s = e as string;
s = <string>e;
- void:表示空,函数没有返回值
function fn(): void {
...
}
- never:表示永远不会返回结果
function fn(): never {
throw new Error('报错了!')
}
- object:对象
let b: {name: string,age?: number};//可指定属性的类型,?表示可选属性
当赋值时不确定有多少个属性时:[propName: string]表示任意类型的属性
let c: {name: string, [propName: string]: any};
c = {name: "猪八戒",age: 18, gender: '男'}
使用箭头函数的实行设置函数结构的类型声明:
(形参: 类型,形参: 类型,...)=> 返回值类型
let d: (a: number, b: number)=>number;
d = function (n1: number, n2: number): number {
return n1 + n2
}
- Array:(两种方式)
let e: string[];
let f: Array<number>;
- tuple元组:固定长度的数组(TS新增)
let g: [string, number, string];
g = ['hello', 12, 'bye'];
- enum枚举:罗列所有可能的值(TS新增)
enum Gender {
male = 0,
female = 1
}
let f: {name: string, gender: Gender};
f = {
name: '孙悟空',
gender: Gender.male
}
类型别名(可简化代码)
type mytype = 1 | 2 | 3 | 4 | 5;
let i: mytype;
let j: mytype;