1.基本數(shù)據(jù)類型
//npm install typescript ts-node -g
//code runner
//ts中冒號(hào)后面的都是類型
const str: string = 'hello zf';
const num: number = 12;
const boolean: boolean = true;
//聯(lián)合類型
let age: string | number = 1;
age = 'hello';
//對(duì)象 數(shù)組 函數(shù)
const arr: number[] = [1,2,3];
//元組
const tuple: [string, number] = ['zf', 1];//指定第一個(gè)必須是字符串,第二個(gè)是數(shù)字
console.log('tuple')
let n: null = null;
let u: undefined = undefined;
//枚舉 只是聲明類型的
enum USER_ROLE {
USER,
MANAHGER,
ADMIN
}
console.log(USER_ROLE.USER) //0
enum USER_ROLE2 {
USER = 'user',
MANAHGER = 'manager',
ADMIN = 'admin'
}
console.log(USER_ROLE2.USER) //user
//any 如果區(qū)分不出來(lái)是什么類型,可以標(biāo)記為any類型
const array: any = [{}, 'a', 123]
//object類型 非原始數(shù)據(jù)類型
//Object.create(arr);
const create = (obj:object)=> {
}
create({});
create([]);
create(function(){});
//對(duì)象類型 (重要)
export {}
2.接口 用來(lái)描述對(duì)象形狀的 interface
interface ISchool {
readonly name: string,
age: number,
address?: string //表示這個(gè)屬性可有可無(wú)
}
let school: ISchool = {
name: 'zf',
age: 11,
address: 'huilongguan'
}
//school.name = 'www' 不可以
//接口可以擴(kuò)展
interface Izhuf extends ISchool {
type: string
[key: string]: any //任意類型
}
let zhuf: Izhuf = {
...school,
type: 'web',
a: 1,
b: 2
}
//類型斷言,表示這個(gè)對(duì)象就是這樣一個(gè)類型
let school2: ISchool = ({
name: 'zf',
age: 11,
address: 'hhhhh',
lessons: ['吃飯','學(xué)習(xí)']
}) as ISchool
3.function
//函數(shù)主要關(guān)系返回值和參數(shù)
function sum1(a: string, b: string): string{
return a + b;
}
sum1('a', 'b');
//可以通過(guò)表達(dá)式來(lái)定義
//聲明一個(gè)類型
type Sum = ((aa: number, bb: number) => number)| string //表示類型是一個(gè)函數(shù)或者字符串
const sum2:(a: number, b: number) => number = (a:number, b:number):number => a + b
const sum3:Sum = (a:number, b:number):number => a + b
//接口
interface Sum2 {
(a: number, b: number): number
}
//區(qū)別type和interface
//interface 可以繼承 可以被類來(lái)實(shí)現(xiàn)
//type僅僅是一個(gè)別名 一版在定義聯(lián)合類型,定義臨時(shí)變量時(shí)可以使用
let sum33 : Sum = (a: number, b: number): number => a + b;
sum33 = 'hello'
4.泛型 generic
//泛型 用來(lái)在代碼執(zhí)行時(shí)傳入的類型,來(lái)確定結(jié)果
function createArray<T>(len:number, value:T):T[]{
let result = [];
for(let i=0;i<len;i++){
result.push(value);
}
return result;
}
let arr = createArray(3, 'hello')
//多個(gè)泛型 元組的交互[boolean, number]= [number, boolean]
const swap = <T,K>(tuple:[T,K]):[K,T]=>{
return [tuple[1],tuple[0]]
}
swap([1,2])
swap<string, number>(['2',3])
export {}