typeScript学习笔记

可以找一个ts的pdf文档,边看边练习,记笔记,基础的学完后在项目中运用,然后再学高级的,pdf电子书下载地址: js51.net

ts学习笔记

typeScript类型

boolean布尔值 number数字 string字符串 object对象 array数组 tuple元组
// enum枚举 any任意类型 void空值 偏门的类型:Date null undefined never几乎不会用到,没什么实际意思

ts 定义数据类型 :代表继承

let isbool: boolean = false;
let isNum: number = 1;
let isStr: string = 'aa';
let arr: number[] = [1, 2, 3];
let numArr: Array<number> = [1, 2, 3];//泛型数组
let objArr: object[] = [{ a: 1 }, { b: 2 }];
let currentTime: Date = new Date();

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

let type_tuple: [string, number];
type_tuple = ['hello', 10];

// 类型断言 明确知道一个变量是什么类型时,用类型断言给这个变量标注类型
// 有时候你会遇到这样的情况,你会比TypeScript更了解某个值的详细信息。 通常这会发生在你清楚
// 地知道一个实体具有比它现有类型更确切的类型。
// 通过_类型断言_这种方式可以告诉编译器,“相信我,我知道自己在干什么”。 类型断言好比其它语言
// 里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。
// TypeScript会假设你,程序员,已经进行了必须的检查。


// 使用类型断言 as语法 
let someVal: any = 'is a string';
let strlength: number = (someVal as string).length;

enum-ts枚举

enum Color { red, blue, green };
let c1: Color = Color.blue;

any void类型

// any 提供强大的js兼容性 跳过ts类型检查
let a: any = 1;
a = '2';

// void 与any相对的数据类型 表示没有任何数据类型
function warnUser(): void {
    alert("This is my void");
}

interface-ts接口

interface-ts接口 接口的作用就是为类型命名和为你的代码或第三方代码定义契约。

// interface定义page接口 params要符合接口类型,:number指函数返回值的类型
interface page {
    pageSize: number,
    pageNumber: number | string,
    age?: number
}
function getList(params: page): number | string {
    return params.pageNumber
}
const num: number | string = getList({ pageSize: 30, pageNumber: 1.9 })
console.log(num)

定义一个或多个不确定属性名 不确定属性类型的接口

interface SquareConfig {
   color?: string;
   width?: number;
   [p: string]: any;
}
function createSquare(config: SquareConfig): void {
   // ...
}
let mySquare = createSquare({ colour: "red", width: 100, a: 12, color: '1' });

interface定义函数类型,每个参数都必须有类型 :后是定义函数的返回类型

interface type_fun {
    (paramsOne: number, paramsTwo: number): number
}
let addFun: type_fun = function (a: number, b: number) {
    return a + b
}
let sum: number = addFun(1, 2)

readonly 定义只读属性,对象属性只能在创建时修改值,赋值后不能改变。 定义常量变量用const 定义常量对象用readonly

interface Point {
    readonly x: number,
    readonly y: string
}
let p1: Point = { x: 10, y: '12' };
// p1.x = 12 无法分配到 "x" ,因为它是只读属性。

extends 继承接口, 多个时用,分开

interface ext {
    name: string
}
interface pages extends page, ext {
    pageall: number
}
let paramss = <pages>{};
paramss.pageSize = 1
paramss.name = '陶'

class-ts类 注意是;结尾

最基本的用法

class people {
    name: string;
    age: number;
    play: Function;
}
let xiaoMing = new people();
xiaoMing.name = '小明';
xiaoMing.age = 12;
xiaoMing.play = function (): void {
    console.log('吃饭')
}

在class中使用constructor constructor构造器,在class中定义构造方法

class userInfo {
    userName: string;
    constructor(msg: string) {
        this.userName = msg;
    };
    getUserInfo() {
        return this.userName
    }
}
function getName(): string {
    let resMsg: string = '😊';
    let g = new userInfo('吃鸡-科学之轮');
    resMsg = g.getUserInfo();
    return resMsg
}
const nameStr = getName()
console.log(nameStr)

extends 类的继承

car叫做派生类,通过extends派生自Animal基类。 派生类也叫做子类,基类叫做超类。

class Animal {
    name: string;
    move(age: number = 2) {
        console.log(`dog is ${age} `)
    }
}
class car extends Animal {
    bark() {
        return 2
    }
}

const car_block = new car();
car_block.name = 'mao';
let car_age: number = car_block.bark()

在class中使用super关键字 当派生类包含了一个构造函数,它_必须_调用 super() ,它会执行基类的构造函数。而且,在构造函数里访问 this 的属性之前,我们_一定_要调用 super() 这个是TypeScript强制执行的一条重要规则.

class c_people {
    name: string;
    constructor(theName: string) {
        this.name = theName;
    };
    say(age: number = 3) {
        console.log(`${this.name} say: my age is ${age}`)
    }
}
class woMan extends c_people {
    constructor(name: string) {
        super(name)
    };
    say(age: number = 4) {
        console.log('is woman:')
        super.say(age)
    }
}
class man extends c_people {
    constructor(name: string) {
        super(name)
    };
    say(age: number = 5) {
        console.log('is man')
        super.say(age)
    }
}

let xiaoHua = new woMan('xiaoHua');
let xiaoLi = new man('xiaoLi')
xiaoHua.say()
xiaoLi.say()

在class中使用 public ,public指定成员是可见的 typeScript中默认定义的所有成员都是public(感觉这个关键字没啥用)

class public_man extends c_people {
    public constructor(name: string) {
        super(name)
    };
    public say(age: number = 5) {
        console.log('is man')
        super.say(age)
    }
}


在class类中使用 private 私有的,当成员被标记成 private 时,它就不能在声明它的类的外部访问。

class private_class {
    private name: string;
    constructor(theName: string) {
        this.name = theName
    }
}
let p_cl = new private_class('cat');
// p_cl.name 报错:属性“name”为私有属性,只能在类“private_class”中访问。

getters/setters
typeScript支持通过getters/setters来截取对 对象成员的访问。它可以帮助你有效的控制对 对象成员的访问。

class noGetSet {
    fullName: string;
}
let noGetSet_one = new noGetSet();
noGetSet_one.fullName = 'taoLiJun';//可以随意的对fullName修改

// 添加getters 和setters
const fullNameMaxLength: number = 10;
class hasGetSet {
    private _fullName: string;
    get fullName(): string {
        return this._fullName
    }
    set fullName(newName: string) {
        if (newName && newName.length > fullNameMaxLength) {
            throw new Error("fullName长度大于10")
        }
        this._fullName = newName;
    }
}
let hasGetSet_one: hasGetSet = new hasGetSet();
hasGetSet_one.fullName = 'xiaoyasdfsdfn';

class类的静态属性 static定义静态属性,静态属性存在于类本身上面而不是类的实例上

class Grid {
    static origin = { x: 0, y: 0 };
    constructor(public scale: number) { };
    play(point: { x: number; y: number; }) {
        let x = (point.x - Grid.origin.x);
        let y = (point.y - Grid.origin.y);
        // sqrt开平方根
        return Math.sqrt(x * x + y * y) / this.scale;
    }
}
let grid1 = new Grid(1.0);
let grid2 = new Grid(5.0);
let numOne = grid1.play({ x: 10, y: 10 })
let numTwo = grid2.play({ x: 10, y: 10 })
console.log(numOne, numTwo)

暂时就这些,后续会持续更新这篇笔记,总结自己学习ts的过程~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值