TypeScript 基础知识

前言:

        只是一篇学习笔记!!!

正文:

// 1、字符串声明
let message: string = "message";
// 2、数字
let age: number = 25;
// 3、布尔值
let isResult: boolean = false;
// 4、数组---- 可以使用 type[] 或 Array<type> 两种方式表示。
let numbers: number[] = [1, 2, 3]; //方式1
let numbers2: Array<number> = [4, 5, 6]; //方式2
let strs: string[] = ["Lee", "Yu", "Fan"];
let strs2: Array<string> = ["Lee_", "Yu_", "Fan"];
// 5、元组 表示已知数量和类型的数组
let p: [string, number] = ["Lee_YU_Fan", 25];
// 6、枚举 用来定义一组命名常量。默认情况下枚举的值是从0开始递增
enum Sex {
  "male" = "男",
  "famale" = "女",
}
let mine: Sex = Sex["male"]; // 输出内容 男
// 7、对象类型 表示非原始类型的值,适用于复杂的对象结构
let user: object = { name: "Lee_YU_Fan", age: 25 };
// 8、联合类型,表示一个变量可以是多种类型之一
let id: string | number;
id = "123";
id = 456;
/* 
9、类型断言 可以让开发者明确告诉编译器变量的类型
   常用于无法推断的情况。可以使用as或尖括号语法
   <类型> 值
   值 as 类型
*/

let value: any = "this id a setring";
let strLength: number = (value as string).length;
let strLen: number = (<string>value).length;
/*
10、字面量类型 可以让变量只能拥有特定的值 
*/
let direction: "up" | "down" | "left" | "right";
direction = "down";

# 数组

//多维数组
let multi:number[][] = [[1,2,3],[4,5,6]]

# Map 对象

//创建Map
let map = new Map()

//初始化Map可以以数组的格式来传入键值对
let map = new Map([["key1","value1"],["key2","value2"]])

//移除Map对象的所有键值对
map.clear()

//设置键值对
map.set("key","value")

// 根据键名获取值
let value = map.get("key")

// 返回一个布尔值,用于判断Map中是否包含键对应的值
let result = map.has("key")

// 删除指定键的键值对,成功删除返回true否则返回false
let res = map.delete("key")

//返回Map中键值对的数量
let len = map.size

// 迭代方法
//1、输出所有的键
for(let k of map.keys()){
    console.log(k)
}
//2、输出所有键对应的值
for(let v of map.values()){
    console.log(v)
}
//3、输出所有键值对
for(let [key,value] of map.entries()){
    console.log(key,value)
}

map.forEach((value,key)=>{
console.log(value,key)
})

  # 元组 

//元组是一种特殊类型的数组,允许在数组中存储不同类型的元素,
//与普通数组不同,元组中的每个元素都有明确的类型和位置。
//元组可以在很多场景下用于表示固定长度,且个元素类型已知的数据结构

//创建元组
let tuple: [number, string, boolean];
tuple = [123, "Lee", false];
console.log(tuple[1]); // "Lee"

//通过push方法可以向元组的末尾添加一个元素,类型必须符合元组定义中的类型约束
//如果超出元组的类型约束,会报错
tuple.push(356);
tuple.pop();

//更新元组
let tup1 = [121, "110"];
tup1[0] = 345;
console.log(tup1); //[345,'110']

//使用标签元组,ts运行为元组中的每个元素添加标签
let tuple2: [id: number, name: string] = [1, "Lee"];
console.log(tuple2); // [1, "Lee"]

//转换为普通数组 -- 元组是一个固定长度、固定类型的数组。但是可以通过Array.prototype
//的方法将其转换为普通数组
let tup3:[number,string,boolean] = [42,'hello',true]
let arr = Array.from(tup3)
console.log(arr)

//元组可以使用数组的concat方法进行连接,但是连接后的结果是一个普通数组而不是元组
//还可以使用数组的slice方法对元组进行切片操作,返回一个新的数组
//还可以使用for...of循环或者forEach方法遍历元组中的元组

# 接口  

//定义一个接口 IPerson
interface IPerson {
  firstName: string;
  lastName: string;
  age: number | string;
  sayHi: () => string;
}
let customer: IPerson = {
  firstName: "Lee",
  lastName: "Yu_Fan",
  sayHi: (): string => {
    return "hi";
  },
};
console.log(customer.firstName);
console.log(customer.lastName);
console.log(customer.sayHi());
let employee: IPerson = {
  firstName: "Cui",
  lastName: "Meng_Jie",
  sayHi: (): string => {
    return "hi";
  },
};
console.log(employee.firstName);
console.log(employee.lastName);
console.log(employee.sayHi());

//接口继承
interface Person {
  age: number;
}
interface Sex {
  sex: string;
}
interface Musician extends Person, Sex {
  instrument: string;
}
let drummer = <Musician>{};
drummer.age = 26;
drummer.instrument = "Drums";
drummer.sex = "male";
console.log(drummer);

# 类

//创建一个Person类
class Person{}
//通过编译得到javascript代码
var Person = (function(){
    function Person(){}
    return Person 
}())

//创建类的数据成员
class Car{
    //字段
    engine:string;
    //构造函数
    constructor(engine:string){
        this.engine = engine
    }
    //方法
    disp():void{
        console.log("发动机为:",this.engine)
    }
}
//创建一个对象
var obj = new Car("XXSY1")
//访问字段
console.log(obj.engine)
//访问方法
obj .disp()

//----------编译代码-----------
var Car = (function{
    //构造函数
    function Car(engine){
        this.engine = engine
    }
    //方法
    Car.prototype.disp = function(){
       console.log("发动机为:",this.engine)
    }
    return Car;
}())
//创建一个对象
var obj = new Car("XXSY1")
//访问字段
console.log(obj.engine)
//访问方法
obj .disp()

/*
    typescript 一次只能继承一个类,不支持继承多个类,但支持多重继承(A继承B,B继承C)
*/
class Shape{
    Area:number;
    constructor(a:number){
        this.Area = a
    }
}
class Circle extends Shape{
    disp():void{
        console.log("圆的面积:"+ this.Area)
    }
}
var obj = new Circle(223)
obj.disp()

//多重继承
class Root{
    str:string;
}
class Child extends Root{}
class Leaf extends Child{}
var obj = new Leaf()
obj.str = "hello"
console.log(obj.str)

/*
    继承类的方法重写
    类继承后,子类可以对父类的方法重新定义,通过super关键字可以对父类进行直接引用,该关键字
    可以引用父类的属性和方法
*/

class PrinterClass{
    doPrint():void{
        console.log("父类的doPrint()方法")
    }
}
class StringPrinter extends PrinterClass {
    doPrint():void{
        super.doPrint()//调用父类的函数
        console.log("子类的doPrint()方法")
    }
}

/*
    static 关键字
    用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用
*/
class StaticMem{
    static num:number;
    static disp():void{
        console.log(StaticMem.num)
    }
}
StaticMem.num = 12 //初始化静态变量
StaticMem.disp() //调用静态方法
let s = new StaticMem()
s.disp() //这中方式是访问不到的

/*
    类和接口
        类可以实现接口
*/
interface ILoan{
    interest:number
}
class AgriLoan implements ILoan{
    interest:number
    rebate:number
    constuctor(interest:number,rebate:number){
        this.interest = interest
        this.rebate = rebate
    }
}
var obj = new AgriLoan(10,1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值