类型
TypeScript的类型有很多,但是这里不会逐一进行讲解。下面列出来的几种类型,有的你可能没听过、有的你可能没用过、有的你可能用过但是不知道含义、有的你可能知道含义但是不能和其他类型区分···
Symbol
ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,它是 JavaScript 语言的第七种数据类型。
使用 Symbol() 函数我们可以申明一个 Symbol 变量,注意不能使用 new 命令,因为它是原始数据类型;Symbol 函数也可以接受一个字符串作为参数,主要是方便当 Symbol 转化为字符串时,比较容易区分,该传入的参数在 ES2019 中支持通过 description 这个实例属性来访问。
Tuple(元组)
众所周知,对象、数组、枚举类型可以存放多个数据;但是,对象和枚举存放的数据以key/value形式存在,不具有排序等特效,数组中存放的只能是同一类型数据;Tuple类型可以看做是对象类型和数组类型特点的结合:
在 JavaScript 中是没有元组的,元组是 TypeScript 中特有的类型,其?作?式类似 于数组。 元组可?于定义有限数量的未命名属性的类型。每个属性都有?个关联的类型。使?元组时,必须 提供每个属性的值,可以通过索引访问元素:
let tupleType: [string, boolean, number];
tupleType = ["hello", true, 2];
console.log(tupleType[0]);
console.log(tupleType[1]);
console.log(tupleType[2]);
any(任意类型)
在 TypeScript 中,任何类型都可以被归为 any 类型。这让 any 类型成为了类型系统的顶级类型(也被 称作全局超级类型)。
any 类型本质上是类型系统的?个避难所,这给了开发者很?的?由:TypeScript 允许我们 对 any 类型的值执?任何操作,包括赋值和被赋值,并且?需事先执?任何形式的检查。?如:
let value: any;
value = 'hello world';
value = true;
value = [];
value = {};
value = 0;
let temp: number;
temp = value;
value.toString();
value.length;
value();
- any可以为任何类型,所以默认变量上的任何属性或者方法都可以找到一个类型(基础类型/自定义类型)对应上,所以检查没有问题;
unknown(不知道什么类型)
就像所有类型都可以赋值给 any ,所有类型也都可以赋值给 unknown 。这使得 unknown 成为 TypeScript 类型系统的另?种顶级类型(另?种是 any );
对 value 变量的所有赋值都被认为是类型正确的。但是,尝试将类型为 unknown 的值赋值给其 他类型的变量时就会有意想不到的限制:
let value: unknown;
value = 'hello world';
value = true;
value = [];
value = {};
value = 0;
let temp: number;
temp = value;
let temp2: any;
temp2 = value;
let temp3: unknown;
temp3 = value;
let temp4: string[];
temp4 = value;
value.toString();
value.length;
value();
void(没有任何类型)
void可以理解为和any正好相反,表示没有任何类型,void一般用于一个函数没用返回值时。当给一个变量定义为void类型时是没有任何作用,变量的值只能是undefined
let value:void;
value = 0;
value = undefined;
null(空值类型)和 undefined(未定义类型)
TypeScript ?, undefined 和 null 两者有各?的类型的值分别为 undefined 和 null ,并且只能是 undefined 和 null:
let value:null;
value = undefined;
value = null;
value = 1;
let value:undefined;
value = undefined;
value = null;
value = 1;
Object、object和{}(对象类型)
【TypeScript】Object、object和{}类型
Never
never 类型表示不存在的值的类型。never 类型用于:
- 抛出异常
- 不会有返回值的函数表达式或箭头函数表达式的返回值类型(无终点,一直执行下去!)。
function error(msg: string)msgever {
throw new Error(msg);
}
function loop(): never {
while (true) {
}
}
使? never 避免出现新增了联合类型没有对应的实现,?的就是写出类型绝对安全的代码;可以利? never 类型的特性对变量类型全?性检查:
type a = string | number;
function checkWithNever(foo: a) {
if (typeof foo === "string") {
} else if (typeof foo === "number") {
} else {
const check: never = foo;
}
}
type a = string | number | boolean;
const c: a = true;
checkWithNever(c);
|