数据类型

JS 七种类型 + 枚举 + any + void + never

(JS 七种类型是 undefined,null,object,symbol,string,Boolean,number)

默认情况下 null 和 undefined 是所有类型的子类型。 就是说你可以把 null 和 undefined 赋值给 number 类型的变量。

| 使得一个参数可以允许选择多种类型。

function getLength(something: string | number): number {
  return something.length;
}

类型断言

不要太相信断言。50% 的几率不可信。因为这可能是随便写的。

let strLength: number = (<string>someValue).length;
let strLength: number = (someValue as string).length;

当你在TypeScript里使用JSX时,只有 as语法断言是被允许的。

类型转化

Typescript不会自动帮你类型转换,需要你自己动手。

let a: number = 123;
let b: string = a.toString();

let c: string = '123';
let d: number = parseFloat(c);

let s1: number = 2;
let b1: boolean = Boolean(s1);

let obj = { name: 'frank', age: 18 };
let string = JSON.stringify(obj);
console.log(typeof string);
console.log(string);

let string2 = `{"name": "frank", "age": 18}`;
let obj2 = JSON.parse(string2);
console.log(typeof obj2);
console.log(obj2);

不要用 var

尽量不要用 var(var很垃圾的),使用 let 和 const。变量用 let,常量用 const。

注意 const 常量只是值不可变,如果 const 常量的值是一个地址,那么地址对应的对象的内容是可变的。

let 不能在1个作用域里多次声明,var 居然可以。

解构

数组、对象都能解构。

let obj = {
  name: 'frank',
  age: 18,
  nation: 'China',
};

// let name = obj.name;
// let age = obj.age;
// let nation = obj.nation;

//解构
let { name, age, nation } = obj;
console.log(name, age, nation);
let arr = ['apple', 'orange', 'pear'];
// let fruit1 = arr[0];
// let fruit2 = arr[1];
// let fruit3 = arr[2];

let [fruit1, fruit2, fruit3] = arr;
console.log(fruit1, fruit2, fruit3);
function sayHi({ name, age }: { name: string, age: number }) {
    console.log(`Hi, ${name}, ${age}`);
}
sayHi({ name: 'Ken', age: 18 });

类型里的类型

public textLists: Array<Array<string | number>> = [
  ["Clear", "÷"],
  [7, 8, 9, "×"],
  [4, 5, 6, "-"],
  [1, 2, 3, "+"],
  [0, ".", "="]
];

不能更改类型

TypeScript 不能改类型

let a = 1;
a = 'strig'; //这在typescript里是错的

null 和 undefined 有点特殊

null 和 undefined 是可以赋值给所有类型的变量。

let a:number = null;
let b:string = undefined;

const 需要注意的点

const 可以改对象里属性的值

const a = { name: "Jack" };
a.name = 'ken';
console.log(a);