类型定义
ts通过冒号实现最基本的类型定义,在变量后接上冒号及定义的类型,如
// 显式类型定义,冒号后即为定义的类型
let age: number = 20
let existsFlag: boolean = true
let language: string = 'JavaScript'
没有赋值时如果变量没有设置类型,则ts会自动推断,ts自动推断后该变量类型也是固定不修改的
基础类型
布尔值 (boolean)
let isDone: boolean = false;
字符串 (string)
let name: string = "bob";
数组 (Array)
-
定义数组时可以同时定义数组内元素的类型,有两种方式可以定义数组
let list: number[] = [1, 2, 3]; // 直接在元素类型后接上[]
-
使用数组泛型,
Array<元素类型>
let list: Array<number> = [1, 2, 3];
元祖 Tuple
-
元组类型允许表示一个已知元素数量和类型的数组,和普通数组区别不大
let x: [string, number] = ['hello', 10]
枚举 (enum)
-
数字枚举
enum Color {Red, Green, Blue} // 0 1 2
-
字符串枚举
enum Direction { Up = "UP", Down = "DOWN", Left = "LEFT", Right = "RIGHT", }
Any (any)
-
当我们在编程阶段还不清楚某个变量的类型,或者其类型可能是动态的,如来自用户输入时;通过设置类型为any可以让该变量跳过编译阶段的类型检查
let notSure: any = 4; notSure = "maybe a string instead"; notSure = false; // okay, definitely a boolean
Object/object
-
object
该类型包含所有的非原始类型// 原始类型 type Primitive = string | boolean | number | bigint | symbol | null | undefined;
-
Object
该类型是所有 Object 类的实例的类型,因此基本包装类型String,Boolean,Number也可以赋值给该类型,该类型包含除null和undefined之外的所有类型const a: Object = 'str' // is Ok
基础数据类型string、number、boolean同时对应了String、 Number、Boolean三种基本包装类型,而基本包装类型和Function等引用类型一样,都是Object的實例;
基本包装类型的声明周期很短,只在代码执行的一瞬间,上面的例子相当于进行了一次基本包装类型的转换,如:
var s1 = "text"; var s2 = s1.substring(2); // text是基本数据类型string,按理来说不应该拥有方法,其之所以能正常调用方法是因为这行代码执行时,其内部相当于执行了 var _s1 = new String("text"); var s2 = _s1.substring(2);
因此检查器不会报错
其实,默认情况下
null
和undefined
可以赋值给任意类型的变量,因为null
和undefined
是所有类型的子类型;--strictNullChecks
标记可以解决此错误
Void
-
仅包含
null
和undefined
可用于函数返回值function testFn(): void { console.log("something"); }
Null 和 Undefined
- null和undefined类型只能赋值他们本身,没什么用
Never
表示的是那些永不存在的值的类型
-
如一定会抛出异常或永远不能到终点的函数
// 返回never的函数必须存在无法达到的终点 function error(message: string): never { throw new Error(message); } // 返回never的函数必须存在无法达到的终点 function infiniteLoop(): never { while (true) { } }
类型断言
-
类型断言相当于从多种类型,如any到确定类型的转换,有尖括号和
as
关键字两种写法,jsx
中只能用aslet someValue: any = "this is a string"; let strLength: number = (<string>someValue).length; // or let strLength: number = (someValue as string).length;