1、布尔值
最基本的数据类型就是简单的true/false值,在ts和js中叫做boolean。
let isDone:boolean = false;
2、数字
和js一样,同时里面的所有数字都是浮点数。这些浮点数的类型是number。除了支持十进制和十六进制字面量,ts还只是ES5中引入的二进制和八进制字面量。
let decLiteral:number = 6;
3、字符串
js程序的另一项基本操作就是处理网页或都武器端的文本数据。像其他语言里面一样,我们使用string表示文本数据类型。和js一样,可以使用双引号或单引号表示字符串。
let name: string = 'bob';
还可以使用模板字符串,可以定义多行文本和内嵌表达式,这种字符串是被反引号包围,并且以${}这种形式嵌入表达式。
4、数组
ts像js一样可以操作数组元素。有两种方式可以定义数组。第一种,可以在元素类型后面接上[ ],表示由此类型元素组成的一个数组。
let list : number[ ] = [ 1,2,3 ];
第二种方式是使用数组泛型,Array< 元素类型 >
let list : Array<number> = [ 1,2,3 ]
5、元组 Tuple
元组类型允许表示一个已知元素数量和类型的数组,各个元素的类型不必相同。比如,不可以定义一对值分别为string和number类型的元组。
let x : [ string,number ];
x = [ ' hello ' ,10 ]; ok
x = [ 10 , ' hello ' ]; error
当访问一个已知索引的元素,会得到正确的类型;
当访问一个越界的元素,会 使用联合类型替代;
6、枚举
enum 类型是对js标准数据类型的一个补充,像c#等其他语言一样,使用枚举类型可以为一组数值赋予友好的名字。
enum Color { Red ,Green ,Blue };
let c:Color = Color.Green;
默认情况下,从0开始为元素编号。你也可以手动的指定成员的数值。
或者全部都采用手动赋值;
枚举类型提供的一个便利是你可以由枚举的值得到它的名字。
7、Any
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。那么我们可以使用any 类型来标记这些变量:
let notSure : any = 4;
not Sure = ' maybe a string instead ';
在对现有代码进行改写的时候,any类型是十分有用的,它允许在编译时可选择地包含或移除类型检查。你可能认为Object有类似的作用,就像它在其他语言中那样,但是Object类型的变量只是允许你给它赋任意值,但是却不能够在它上面调用任意的方法,即便它真有这些方法。
当你只知道一部分数据的类型时,any类型也是有用的,比如,你有一个数组,它包含了不同的类型的数据:
let list : any[ ] = [ 1,true , ' free ' ];
list [ 1 ] = 100;
8、Void
某种程度上来说,void类型像是与any类型相反,它表示没有任类型。当一个函数没有返回值时,通常会见到其返回值类型是void:
function warnUser( ) :void {
console.logaaa( " This is my warning messsage");
}
声明一个void 类型的变量没有什么大用,因为你只能为它赋予undefined 和 null:
let unsable :void = undefined;
9、Null 和 Undefined
TypeScript里面,undefined和null两者各自有自己的类型叫做undefined和null。和void相似,它们的本身的类型用处不是很大:
let u : undefined = undefined;
let n: null = null;
默认情况下null和undefined是所有类型的子类型,就是说你可以把null和undefined只能赋值给void和他们各自。这能避免很多常见的问题。也许在某处你想传入一个string或null或undefined,你可以 使用联合类型string | null | undefined。
10、Never
never类型表示的是那些永不存在的值的类型。例如,never类型是那些总是会抛出异常或根本不会有返回值的函数表达式或箭头函数表达式的返回值类型;变量也可能是never类型,当他们被永不为真的类型保护所约束时。
never类型是任何类型的子类型,也可以赋值给任何类型。然而,没有类型是never的子类型或可以赋值给never类型,除了never本身之外,即使any也不可以赋值给never。
11、Object
object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
使用object类型,就可以更好的表示像Object.create这样的API.
12、类型断言
有时候会遇到这样的情况,你会比ts更了解某个值的详细信息。通常这会发生在你清楚地知道一个实体具有比他现有类型更确切的类型。
通过类型断言这种方式告诉编译器,“相信我,我知道自己在干什么”。类型断言好比其他类型里面的类型转换,但是不进行特殊的数据检查和解构。它没有运行时的影响,只是编译阶段起作用。ts会假设你,程序员,已经进行了必须的检查。
类型断言两种形式,其一是“尖括号”语法:
let someValue :any = " this is a string " ;
let strLength : number = (<string>someValue).length;
另一个为as语法:
let someVaule :any = " this is a string";
let strLength : numbet = ( someValue as string).length;
两种形式是等价的,至于使用哪个大多数 情况下是凭个人喜好,然而,当在ts里面使用Jsx时,只有as 语法断言 是被允许的。
13、关于let
你可能已经注意到了,我们使用let 关键字来代替大家所熟悉 的js的关键字var。let 关键字是javascript的一个新概念,ts实现了它。