# TS基础语法

# 基础类型

# 数据声明

1、布尔类型

let judge: boolean = false;

2、数字类型

let count: number = 123

3、字符串类型

let text: string = "何元鹏" 

4、数组类型
在TypeScript中对数组的定义分为两种

let arrayData: number[] = [1,2,3]
// 或者
let arrayData: Array<number> = [1,2,3]

5、元组类型
元组类型是表示一个已知数量和类型的数组,各元素的数据类型可以不同。

let arrayData: [number,string];
arrayData = [1,"帅哥"]

在元组中数据的存储也必须符合元组中声明的数据类型

arrayData[3]="美女"
// "美女"属于字符串类型,所以可以进行赋值
arrayData[4] = true;
// true属于布尔类型在元组中并未声明所以不能属于,赋值失败

同样在使用函数方法的时候也是一样的效果,如果在未声明数组类型的时候是不能使用数组方法的。

console.log(arrayData[2].toString()) // ok
console.log(arrayData[1].substr(0)) // error

当访问一个越界的元素,我们会使用到联合类型

console.log(arrayData[5].toString()) // ok 因为在上面声明的araayData中本身就存在string类型

6、枚举类型
enum类型是JavaScript标准数据类型的一个补充,如同其他语言中的作用,使用枚举类型可以为一组数值赋予友好的名称

enum color {one,two,three}
let one: color =  color.one
// one=0:因为在未赋值的情况下,默认是从0开始的。如果已经手动赋值,那么就等于当前对应的值。

当然在enum中也可以使用值去寻找当前的值对应的名称,如同知道value寻找key,如果有两个key对应的value值相同则覆盖取后者。

enum Color {Red , Green = 12, Blue = 12}
let colorName: string[] = [Color[12]]; 
console.log(colorName);   // Blue

7、Any类型
Any类型使用于我们在编程阶段还不清楚变量的数据类型时使用。

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
console.log(notSure) // false

在对现有代码进行改写的时候,any类型是十分有用的,它允许你在编译时可选择地包含或移除类型检查。 你可能认为 Object有相似的作用,就像它在其它语言中那样。 但是 Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法,即便它真的有这些方法:

let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)

Any也可以使用在数组上面

let list: any[] = [1, true, "free"];

list[1] = 100;
// [1,100,"false"]

8、Object类型 object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。

使用object类型,就可以更好的表示像Object.create这样的API

declare function create(o: object | null): void;

create({ prop: 0 }); // OK
create(null); // OK

create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error