1藤巢、基礎(chǔ)類型
- 常用:string, number, boolean, array, enum, any, void
- 不常用: tuple、null、undefined茎刚、never
2悲关、對象類型
interface和type (type更強(qiáng)大谎僻,interface可以進(jìn)行類型聲明)
3、數(shù)組類型
interface item {
name:string;
age: number;
sex?:string;
}
const strArr:string[] = ['測試', '數(shù)據(jù)', '字符串'];
const numArr:number[] = [1,2,3];
const itArr:item[] = [{name: "tom", age: 18}, {name: "rose", age: 20}];
4寓辱、元組類型
// 數(shù)組 某個位置的值可以是注解中的任何一個
const LOL: (string | number)[] = ["zed", 25, "darts"];
// 元祖 每一項數(shù)據(jù)類型必須一致
const LOL: [string, string, number] = ["zed", "darts", 25];
5艘绍、聯(lián)合| or 交叉&類型
- 聯(lián)合類型:某個變量可能是多個 interface 中的其中一個,用 | 分割
- 交叉類型:由多個類型組成秫筏,用 & 連接
interface Waiter {
eat: boolean;
say: () => {};
}
interface Teacher {
eat: boolean;
sayHello: () => {};
}
// 聯(lián)合類型
function lianHe(animal: Waiter | Teacher) {}
// 交叉類型
// 同名類型會進(jìn)行合并诱鞠,同名基礎(chǔ)類型屬性的合并返回:never
// 同名非基礎(chǔ)類型屬性可以正常合并
function lianHe(jishi: Waiter & Teacher) {}
6、enum枚舉
enum typeEnum {
GSBB= "公司本部",
GSWB = "外部",
GSYX = "營銷部"
}
7这敬、 泛型
簡單說就是:泛指的類型航夺,不確定的類型,可以理解為一個占位符(使用T只是習(xí)慣崔涂,使用任何字母都行)
K(Key):表示對象中的鍵類型阳掐;
V(Value):表示對象中的值類型;
E(Element):表示元素類型冷蚂。
// T 自定義名稱
function myFun<T>(params: T[]) {
return params;
}
myFun <string> (["123", "456"]);
// 定義多個泛型
function join<T, P>(first: T, second: P) {
return `${first}${second}`;
}
join <number, string> (1, "2");
8缭保、斷言
- 斷言用來手動指定一個值的類型。值 as 類型 or <類型>值( <類型>值這種寫法在jsx語法中會沖突)
class Person{
sayHello(){
console.log("hello")
}
}
class Child extends Person{
sayWorld(){
console.log("世界")
}
}
// child.sayHello
let c = new Child();
c.sayHello();//父類
c.sayWorld();
function fn(p: Person){
p.sayHello();
(p as Child).sayWorld()
}
fn(c);