ts-基础类型

148 阅读3分钟

一、基础类型:

1)布尔值:

let isDone: boolean = false;

2)数字: (支持十、十六、八、二进制)

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;

3)字符串: (""、''、可使模版字符串*)

 let name: string = "bob";
 let sentence: string = `Hello, my name is ${ name }. I'll be ${ age + 1 } years old next month.`;

4)枚举: (可为一组数值赋予友好的名字,---默认情况下,从0开始为元素编号,y也可以设置,如Red = 1,则Green=2,或者直接分别赋值)

enum Color {Red = 1, Green, Blue} 

let colorName: string = Color[2];

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

5)任何类型: (类型检查器对这些值不进行检查,直接通过编译阶段)

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

或

let notSure: any = 4;

6)任何类型: (void类型像是与any类型相反,它表示没有任何类型)

function warnUser(): void { 
   console.log("This is my warning message");
 }
 
或:

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

7)元组: (元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同)

let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error

console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型
console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString
x[6] = true; // Error, 布尔不是(string | number)类型

-----------------  元组和数组类似,但是类型注解时会不一样  -------------------------------
-----------  赋值的类型、位置、个数需要和定义(生明)的类型、位置、个数一致------------------

// 数组 某个位置的值可以是注解中的任何一个
const LOL: (string | number)[] = ["zed", 25, "darts"];

// 元祖 每一项数据类型必须一致
const LOL: [string, string, number] = ["zed", "darts", 25];

二、对象类型

(interface 和 type)借用

1) 一般声明都用interface,需要用到其他变量类型,type多一些 ; interface 可以进行`声明合并`,type 不行 

interface Hero {
  name: string;
  age: number;
  skill: string;
  skinNum?: number;
  say(): string; // say函数返回值为string
  [propname: string]: any; // 当前Hero可定义任意字符串类型的key
}
// 继承
interface littleSoldier extends Hero {
  rush(): string;
}
// 任意类型
interface IAnyObject {
  [key: string]: any;
}

type Hero = {
  name: string,
  age: number,
  skill: string,
  skinNum?: number,
};

三、数组类型:

(数组泛型Array<元素类型>)

interface IItem {
  id: number;
  name: string;
  isGod: boolean;
}

const objectArr: IItem[] = [{ id: 1, name: '俊劫', isGod: true }];
// or
const objectArr: Array<IItem> = [{ id: 1, name: '俊劫', isGod: true }];

const numberArr: number[] = [1, 2, 3];

const arr: (number | string)[] = [1, "string", 2];

四、类型断言:

(知道类型的情况下使用,两种形式都可用,较推荐as )


1)“尖括号”语法:
let someValue: any = "this is a string"; 
let strLength: number = (<string>someValue).length;

2`as`语法  (在TypeScript里使用JSX时,只有 `as`语法断言是被允许的)
let someValue: any = "this is a string"; 
let strLength: number = (someValue as string).length;

五、解构数组:

1)作用于函数参数:
  function f([first, second]: [number, number]) { 
    console.log(first);
    console.log(second); 
     }
  f(input);
  
2)使用`...`语法创建剩余变量
let [first, ...rest] = [1, 2, 3, 4]; 
console.log(first); // outputs 1 
console.log(rest); // outputs [ 2, 3, 4 ]

后期再补充常用的

六、对象解构:

1)## 函数声明
  type C = { a: string, b?: number };
  function f({ a, b }: C): void { 
     // ... 
   }
   
或:

  function f({ a="", b=0 } = {}): void { 
     // ...
  }
  
 f();