6 TypeScript基础

目录

前言

一、TypeScript是什么?

二、TypeScript的类型

1.Number 数字类型

2.String 字符串类型

3.Boolean 布尔类型

4.Array 数组类型

5.tuple 元组类型

6.Union 联合类型

7.Literal 字面量类型

8.Enum 枚举类型

9.any 和 unknown

10.void/undefined与 Never

11.Type Assertions 类型适配(类型断言)

12.函数类型

三、TypeScript面向对象

1.object 对象类型

2.Interface 接口

3.Class 类

4.Access Modifier 访问修饰符

5.Generics 泛型

总结​​​​​​​


前言

TypeScript基础知识


一、TypeScript是什么?

1、规范代码,类型检查

2、在代码编译阶段发现问题

3、在原生js基础上加了一层类型定义

4、支持javaScript 最新特性(包含ES6/7/8)

二、TypeScript的类型

1.Number 数字类型

let num: number = 0;

2.String 字符串类型

let str: string = '1';

3.Boolean 布尔类型

let bol: boolean = true;

4.Array 数组类型

let list1: number[] = [1,2,3,4];
let list2: Array<number> = [1,2,3,4];
let list3 = [1,2,3,4];

let list4 = [1,'string'];
let list5:any[] = [1,'string',true];

5.tuple 元组类型

// 固定长度,固定类型的Array
let work1: [number, string] = [1,'str'];

work1[0] = 'aaa'; // error
work1[1] = 123; // error
work1[2] = 111; // error

tuple 使用注意:

元组类型有个bug:无限度的给数组添加元素(push)

声明一个元祖的时候一定要指明类型

6.Union 联合类型

// 一个变量可以同时支持几个类型
let union : string | number;
union = 2;
union = 'str';
// union = true;

let union2 : number | string | boolean | string[];

function merge(n1: number | string, n2: number | string) {
    if(typeof n1 === 'string' || typeof n2 === 'string')
        return n1.toString() + n2.toString();
    else
        return n1 + n2;
}

let mergeNumber = merge(1,2);
let mergeString = merge('cc','dd');
console.log(mergeNumber); // 3
console.log(mergeString); // ccdd

7.Literal 字面量类型


let union3: 0 | 1 | 2;
union3 = 1;
// union3 = 4;

let literal : 1 | '2' | true | [1,2,3,4];


function merge(
    n1: number|string, 
    n2: number|string, 
    resultType:'as-number'|'as-string'
) {
    if(resultType === 'as-string') {
        return n1.toString() + n2.toString();
    }
    if(typeof n1 === 'string' || typeof n2 === 'string')
        return n1.toString() + n2.toString();
    else
        return n1 + n2;
}

let mergeNumber = merge(1,2,'as-number');
let mergeNumber2 = merge(1,2,'as-string');
let mergeString = merge('cc','dd','as-string');
console.log(mergeNumber); // 3
console.log(mergeNumber2); // 12
console.log(mergeString); // ccdd

8.Enum 枚举类型

// 枚举类型,真正的类型数据是数字,默认从0开始,也可以自定义
enum Color {
    red,
    green,
    blue
}

let color = Color.blue;
console.log(color); // 2(定义的顺序)

enum Color1 {
    red=5,
    green,
    blue
}

let color1 = Color1.blue;
console.log(color1); // 7

enum Color2 {
    red=5,
    green=10,
    blue=1
}

let color2 = Color2.blue;
console.log(color2); // 1

enum Color3 {
    red='red',
    green='green',
    blue=1
}

let color3 = Color3.green;
console.log(color3); // green

9.any 和 unknown

let any1: any = 666;
any1 = true;
any1 = 'str';
any1 = {};
any1(); // error
any1.toUpperCase();

// unknown 不保证类型,能保证类型安全,确定变量类型才能正常使用
let any2: unknown = 666;
any2 = true;
any2 = 'str';
any2 = {};
// any2(); //error
// any2.toUpperCase(); // error

if(typeof any2 === 'function){
    any2();
}

if(typeof any2 === 'string'){
    any2.toUpperCase();
}

10.void/undefined与 Never

// void 没有返回值
function printResult() : void {
    console.log('aaaa');
}

console.log('123 ', printResult()) // 123 undefined

// undefined 返回值为 undefined
function printResult() : undefined {
    console.log('aaaa');
    return
}

console.log('123 ', printResult()) // 123 undefined

// never 函数永远不会执行完成(大部分处理异常)
function throwError(message: string, errorCode: number): never {
    throw {
        message,
        errorCode
    }
} // 函数永远不会执行到这里

throwError('not found',404)

function whileLoop(): never {
    while(true){
        console.log(111)
    }
}

11.Type Assertions 类型适配(类型断言)

// 明确知道类型,谨慎使用
let message : any;
message = 'abc';
message.endsWith('c');

let a = (<string>message).endsWith('c');
let b = (message as string).endsWith('c');

12.函数类型

let log = function(message) {
    console.log(message);
}

let log2 = (message: string) => console.log(message);
log2('hello');
// log2(2); // error
// log2(true); // error

let log3 = (message: string, code?: number) => {
    console.log(message, code);
}
log3('hello'); // code不传默认undefined

let log4 = (message: string, code: number = 0) => {
    console.log(message, code);
}
log4('hello'); // code不传默认0

三、TypeScript面向对象

1.object 对象类型

// ts 自动给变量匹配类型
const person = {
    local: '北京',
    work: '前端',
    age: 18 
}
console.log(person);
// console.log(person.a); // error

const person1: {
    local: string,
    work: string,
    age: number
} = {
    local: '北京',
    work: '前端',
    age: 18 
}
console.log(person);

2.Interface 接口

let drawPoint = (point: Point) => {
    console.log({x: point.x, y: point.y});
}

drawPoint({x: 105, y: 204});
// drawPoint({x: '文字1', y: '文字2'});
// drawPoint({a: '哈哈', b: '123'});

interface Point {
    x: number;
    y: number;
}

// 高内聚(功能相关的放在一个集合形成一个模块)、低耦合(模块应该互相独立,不同模块保持低耦合)

3.Class 类

interface IPoint {
    x: number;
    y: number;
    drawPoint: () => void;
    getDistances: (p: IPoint) => number;
}

class Point implements IPoint {
    x: number;
    y: number;

    constructor(x?: number, y?: number) {
        this.x = x;
        this.y = y;
    }

    drawPoint = () => {
        console.log('x: ',this.x, ' y: ',this.y);
    }
    getDistances = (p: IPoint) => {
        return Math.pow(p.x-this.x, 2) + Math.pow(p.y-this.y, 2);
    }
}

const point = new Point(2,3);
// point.x = 2;
// point.y = 3;
point.drawPoint();

4.Access Modifier 访问修饰符

publice private

interface IPoint {
    drawPoint: () => void;
    getDistances: (p: IPoint) => number;
    X: number;
    //setX: (value) => void;
    //getX: () => number;
    setY: (value) => void;
    getY: () => number;
}

class Point implements IPoint {
    // x: number;
    // y: number;

    constructor(private x: number, private y: number=2) {
        // this.x = x;
        // this.y = y;
    }

    drawPoint = () => {
        console.log('x: ',this.x, ' y: ',this.y);
    }
    getDistances = (p: IPoint) => {
        return Math.pow(p.X-this.x, 2) + Math.pow(p.getY()-this.y, 2);
        //return 0;
    }

    //setX = (value: number) => {
    //    if(value < 0){
    //        throw new Error('value不能小于0');
    //    }
    //    this.x = value;
    //}
    set X (value: number) {
        if(value < 0){
            throw new Error('value不能小于0');
        }
        this.x = value;
    }

    get X () {
        return this.x;
    }

    setY = (value: number) => {
        if(value < 0){
            throw new Error('value不能小于0');
        }
        this.y = value;
    }

    getY = () => {
        return this.y;
    }
}

const point = new Point(2,3);
point.setX(10);
// point.setX(-10);
console.log(point.getX())

// 懒人包编译需ES5以上
tsc -t es5 index.ts

5.Generics 泛型

let list1: number[] =  [1,2,3,4];
let list2: Array<string> = [1,2,3,4];

let lastInArray = <T>(arr: T[]) =>{
    return arr[arr.length - 1];
}

const l1 = lastInArray([1,2,3,4]);
const l2 = lastInArray(['a','b','c','d']);
const l3 = lastInArray<string | number>(['a','b',1]);

let makeTuple = <T, Y = 'string'>(x: T, y: Y) => [x, y];

const v1 = makeTuple(1,'one');
const v2 = makeTuple<boolean, number>(true,'one');


总结

以上是TypeScript基础,还需深入学习。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值