前端学习笔记—TypeScript基础

一、简介

js的局限

因为JavaScript不够现代化开发的需求,扩充到了现在的TypScript。由弱类型语言向强类型语言发展。TypScript类似java、kotlin等面向对象语言。


image.png

image.png

二、编译

  • 1.命令行编译。手动创建.ts文件后再单独创建编出译浏览器可识别的js文件


    命令行编译
image.png

image.png
  • 2.命自动化编译。通过node.js初始化依赖后,自动监视ts文件变化后创建js变化后的文件


    image.png

三、数据类型

  • 1、JavaScript数据类型

image.png
  • 2、TypeScript数据类型

image.png
注意
注意

自动装箱特性

自动装箱

类构造函数:TypeScript 允许你在构造函数中使用类型推断来简化赋值操作。

class PersonA{
  name:string
  // 构造函数
  constructor(name: string) {
   this.name = name;
  }
}

使用public用法,省去this赋值
class PersonB{
  // 构造函数
  constructor(public name: string) {
  }
}
  • 常用类型

1.any类型

any类型

2.unknown类型

unknown类型

3.never类型

never类型

4.void类型

void类型

undefined是void返回类型的一个特殊情况

undefined

5.object和Object类型
基本很少用object和Object,包含的范围太广了

小写object

大写Object

6.对象类型

image.png

image.png
tuple

7.枚举类型enum:一组命名常量,一组一组相关的值,它能增强代码的可读性,也让代码更好维护。

image.png

image.png

image.png

常量枚举

常量枚举

8.type类型

基本
image.png
并且
交叉
type设定为void类型时特殊情况
  • 1.定义void类型时马上使用,这种情况可以准确控制类型


    image.png
  • 2.先定义void类型,后使用,这种情况特殊不做严格控制。注意这种情况,不能拿f1,f2,f3等属性在做其他逻辑比较等操作,因为返回的是void。


    特殊用法

四、装饰器

简介

image.png

前端中的装饰器(Decorators)与 Java 中的注解(Annotations)在概念上有相似之处,即它们都为元编程提供了支持。但是,在实际的应用和实现细节方面,它们之间还是存在着显著的不同。下面详细解释两者的异同点。

相同点

  1. 元编程:两者都是元编程的技术,允许在代码层面之上进行编程,即编写代码来操作其他代码。
  2. 附加信息:无论是装饰器还是注解,都可以用来向代码添加额外的信息,这有助于其他工具或框架理解和处理这些信息。

不同点

  1. 目的和用途
  • 前端装饰器:主要用于在类声明时添加行为,例如在框架中用于定义组件的行为,增强类的功能等。装饰器可以用来改变类的行为或结构,如改变方法实现,拦截属性访问等。
  • Java 注解:主要用于提供元数据,如文档化、跟踪代码依赖关系和指定编译时或运行时的框架行为。注解本身并不改变程序的行为,但可以通过反射来读取并据此执行某些操作。
  1. 实现方式
  • 前端装饰器:装饰器是函数,在类声明、方法、属性、访问器或参数声明时调用,可以接收特定的参数并根据需要修改目标对象。
  • Java 注解:注解是接口的实现,通常由编译器或运行时框架来处理,可以通过自定义注解处理器来在编译时生成额外的代码。
  1. 执行时机
  • 前端装饰器:装饰器函数是在运行时被执行的,这意味着它们可以动态地改变类的行为。
  • Java 注解:大多数情况下是在编译时被处理,当然也可以在运行时通过反射获取,但注解本身并不会直接改变程序的行为。
  1. 使用场景
  • 前端装饰器:常见于现代前端框架如 Angular 中,用于声明组件、服务、指令等。
  • Java 注解:广泛应用于各种框架中,如 Spring 中的 @Component, @Service,Hibernate 中的 @Entity 等。
  1. 语法差异
  • 前端装饰器:使用装饰器语法 @decorator 形式来标记类、方法等。
  • Java 注解:使用 @Annotation 来标记类、方法等,并且可以通过 @Retention 来指定注解的生命周期(如 RUNTIME, CLASS, SOURCE 等)。
    总结来说,尽管装饰器和注解都有助于代码的扩展性和可维护性,但是它们的设计意图和技术实现上还是有很大的区别的。装饰器更侧重于动态修改类的行为,而注解更侧重于提供元数据以供框架或工具使用。
  • 类装饰器

image.png
image.png
image.png
image.png

image.png
  • 属性装饰器

image.png
image.png
  • 方法装饰器

方法装饰器是函数,它们可以用来修改类的方法。方法装饰器可以接收三个参数:
第一个参数,类的原型对象:即 this 对象的原型。
第二个参数,方法的名字:字符串形式的方法名称。
第三个参数,属性描述符:描述符对象,包含了方法的属性(如 value、writable、enumerable 和 configurable)。

在这个例子中,如果不返回 descriptor,则原有方法的描述符将不会被替换,装饰器所做的修改也不会生效。返回 descriptor 使得方法的行为被新的描述符所取代。

在这个例子中,log 装饰器用于记录方法调用时的输入和输出。

function log(target: any, name: string, descriptor: PropertyDescriptor) {
    const originalMethod = descriptor.value;//descriptor描述符对象,包含方法的属性

    descriptor.value = function (...args: any[]) {
        console.log(`Calling "${name}" with`, args);
        const result = originalMethod.apply(this, args);
        console.log(`"${name}" returned`, result);
        return result;
    };

    return descriptor;// 返回修改后的描述符
}

class MyClass {
    @log
    doSomething(value: string): string {
        return value.toUpperCase();
    }
}

const instance = new MyClass();
const result = instance.doSomething('hello');
  • 访问器装饰器

访问器装饰器是函数,它们可以用来修改类的访问器(getter 或 setter)。访问器装饰器可以接收三个参数:
第一个参数,类的原型对象:即 this 对象的原型。
第二个参数,访问器的名字:字符串形式的访问器名称。
第三个参数,属性描述符:描述符对象,包含了访问器的属性(如 get 和 set)。

image.png
image.png
总结
  • 装饰器工厂

装饰器本质是一个函数。一个函数能够返回一个装饰器就是一个装饰器工厂。


装饰器工厂
image.png

五、Vue与TypeScript结合

  • Vue 3 的 Composition API 结合使用ts


    vue-1

    vue-2

    vue-3

    vue-4
  • ts使用:不用单独创建.ts文件吗


    image.png

    image.png

    image.png

    image.png

    image.png
  • ts使用:什么场景需要创建单独的 .ts 文件


    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容