enum类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予变量名称。
接下来我们看一张图
然后我们边写代码边理解这张图的含义
enum Color {Red,Blue,White};
console.log(Color);
//编译成js
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Blue"] = 1] = "Blue";
Color[Color["White"] = 2] = "White";
})(Color || (Color = {}));
;
console.log(Color);
打印结果如上方图
我们可以通过color[下标]的方法找到传进去的参数
也可以 通过color["参数"] 的方法找到下标
默认情况下是从0开始排序的
这里如果我们给传进去的第一个参数传进一个数值 会按照数值排序嘛
enum Color {Red=3,Blue,White};
console.log(Color);
//这里我们给第一个值赋予3 注意打印结果
//{3: "Red", 4: "Blue", 5: "White", Red: 3, Blue: 4, White: 5}
//这里我们看到从3开始排序
//如果从中间赋值呢
enum Color {Red,Blue=7,White};
console.log(Color);
//注意打印结果
//{0: "Red", 7: "Blue", 8: "White", Red: 0, Blue: 7, White: 8}
//这里我们看到第一项是正常从0排序的 然后第二项开始就排序
//得出结论 我们在枚举类型的参数中 从第几项赋值 参数就会在第一项排序 如果没有赋值 默认从0开始
枚举类型提供的一个便利是你可以由枚举的值得到它的名字。 例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:
enum Color {Red,blue,green}
let colorName:string = Color[1];
console.log(colorName);
//这里我们可以打印出blue 通过下标找到相应的名字
我们的enum(枚举类型)就到这里了 接下来欢迎我们的新朋友 Any(任意类型)登场
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。这些值可能来自于动态的内容,比如来自用户输入或是从后端请求来的数据
这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any类型来标记这些变量
接下来让我们用代码认识新朋友
let a:any = 1;
console.log(a);
a = "小明";
console.log(a);
a = {
name:"xiaohua"
}
console.log(a);
这里没有报错 而是打印出了我们想要的值
说明any支持任意数据类型
Void表示没有任何类型。
声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null:
let fn:void = null;
let abc:void = "456"
这里第一个不会报错
而第二个会报错
这里我们再说一下undefined和null
默认情况下null和undefined是所有类型的子类型。
就是说你可以把 null和undefined赋值给number类型的变量
never类型表示的是那些永不存在的值的类型
这个严格来说算不上啥新的数据类型, 只是开发者对于一类值所起的作用的判断而已
比如:
- 总是会抛出异常, throw错误或是返回一个error类型的数据
- 根本就不会有返回值的函数表达式(死循环函数)
//这是抛出错误
function error(msg:string):never{
throw new Error(msg)
}
function fn():void{
return error("这里发生错误");
}
fn()
//死循环
function inLoop():never{
while(true){
console.log("懒洋洋是大帅比");
}
}
never类型是任何类型的子类型,也可以赋值给任何类型;
然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使
any也不可以赋值给never
let a:string;
let n:never;
n = "懒洋洋";//注意了 这里会报错
//然而呢 a变量要是写入一个error呢
a = (()=>{throw new Error("这是发生错误")})();
//这就不会报错
断言类型
有时候你会遇到这样的情况,你会比TypeScript更了解某个值的详细信息。 通常这会发生在你清楚地知道一个变量具有比它现有类型更确切的类型(比如说满是数字的数组,或是全都是自然数下标的对象, 这只是一个举例)。
- 通过类型断言这种方式可以告诉编译器,“相信我,我知道自己在干什么”。
- 类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。
- 它没有运行时的影响,只是在编译阶段起作用。 TypeScript会假设你,程序员,已经进行了必须的检查
let a:any = "this is a str";
let le:number = (<string>a).length;
//尖括号语法
let len:number = (a as string).length;
//as语法
总结
数据类型 | 关键字 |
---|---|
任意类型 | any |
数字类型 | number |
字符串类型 | string |
布尔类型 | boolean |
数组类型 | 无,可以在其他类型后面跟上[] |
元组 | 无 |
对象 | object |
枚举类型 | enum |
void | void |
undefined | undefined |
null | null |
never | never |