Typescript #2 类型概览

Posted charmanders5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Typescript #2 类型概览相关的知识,希望对你有一定的参考价值。

原始类型


javascript原始类型也同样适用于 TypeScript的类型系统。因此,string, number,boolean也可以被用作类型注解:

 let num: number;
 let str: string;
 let bool: boolean;

 num = 123;
 num = 123.45;
 num = '123'; //Type '"123"' is not assignable to type 'number'

 str = '123';
 str = 123; //Type '123' is not assignable to type 'string'

 bool = true;
 bool = false;
 bool = 'false';//Type '"false"' is not assignable to type 'boolean'.

数组

类型注解+[],它能让你安全的使用任何有关数组的操作,而且它能放置一些类似赋值错误类型给成员的行为。

// 元素类型加[]写法
let list:number[] = [1,2,3]
// 数组泛型写法
let list: Array<number> = [1,2,3]

元祖

已知元素数量类型的数组

// 声明一个元组类型
let x: [string, number];
// 初始化赋值
x = ['hello', 10]; // OK
// 初始化错误
x = [10, 'hello']; // Error

枚举

在计算机语言中一般用数值来表示某种状态,这种方式不直观,可读性很差。枚举就是把给一些计算机的状态(数字)和一个自然语言相应含义的单词对应起来,目的是把所有的情况都用枚举写出来,这样根据不同的状态对应不同的枚举值,提高了代码的可读性。

枚举类型可以为一组数值赋予友好的名字。默认情况下,从0开始为元素编号,你也可以手动的指定成员的编号。

enum Color Red = 1,Geeen = 2, Blue = 4
let c: Color = Color.Green

编译后

var Color;
(function (Color) 
    Color[Color["Red"] = 1] = "Red";
    Color[Color["Green"] = 2] = "Green";
    Color[Color["Blue"] = 4] = "Blue";
)(Color || (Color = ));
console.log(Color) // 在函数最后进行打印,返回一个JSON
var c = Color.Green;

枚举的名对应是一个变量,然后判断是否有值,如果没有赋值json,然后在自调用函数里,对对象进行赋值,可以在函数最后进行打印,此时json里的值所有的表达式都有返回值,它的返回值就是等号右边的赋值。

 '1': 'Red', '2': 'Green', '3': 'Blue', Red: 1, Green: 2, Blue: 3 

如果你看不大明白上面的代码,那么你必须知道console.log(Color["Red"]=0)返回0。

此外,枚举类型提供的一个遍历是你可以由枚举的值得到它的名字(从上面编译后的源码就可以看出)。例如,我们知道值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:

enum Color Red = 1, Green, Blue
let colorName: string = Color[2];

console.log(colorName);  // 显示'Green'因为上面代码里它的值是2

null & undefined

null和undefined是其他所有类型的子类型

const n1:null = 123;
const n2:undefined = '123';

如果一个变量的值确实需要是null或者undefined, 可以像下面这么用, ts会自动根据if/else推导出正确类型:

// 这是"联合类型", 在"高级类型"中会有详细介绍, 表示n可能是undefined也可能是number
let num: undefined|number;

if(Math.random()>0.5) num = 1;

if(undefined !== num) 
    num++;

any

any类型在 TypeScript 类型系统中占有特殊的地位。它提供给你一个类型系统的【后门】,TypeScript将会把类型检查关闭。在类型系统里any能够兼容所有的类型(包括它自己)。因此,所有的类型都能够被赋值给它。它也能被赋值给其他任何类型。

void

使用 :void来表示一个函数没有返回值

 function log(message:string):void
    console.log(message)

声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null:

let unusable:void = undefined

never

never表示不可达, 用文字还真不好描述, 主要使用在throw的情况下:

function error():never
    throw '错了!';

以上是关于Typescript #2 类型概览的主要内容,如果未能解决你的问题,请参考以下文章

进阶学习13:TypeScript——安装使用特性详解

TypeScript `infer` 关键字

TypeScript入门学习之路

在分配之前使用变量'test' - Typescript

如何在1分钟内学会“TypeScript”

React Navigation + TypeScript 错误:类型“EventStackParams”不满足约束“Record<string, object |未定义>'