Nest-TS基础知识补充-2

泛型的作用?用法?

泛型:我们使用类型变量T,帮助我们提高代码的复用性和准确性;而使用了类型变量的函数叫做泛型,因为它适用于多个类型。

泛型类指的是实例部分的类型,类的静态属性不能使用这个泛型类型。

泛型约束:在T extends 接口,则传入函数的类型就要符合接口的(约束)类型的值。

注意:

在泛型里使用类类型,使用泛型创建工厂函数(比如装饰器工厂),需要引用构造函数

function create<T>(c: {new(): T; }): T { return new c(); }

模块和命名空间?

注意:官网中,“内部模块”被称作“命名空间”,“外部模块”被称为“模块”

模块:

模块在其自身的作用域里执行,而不是全局作用域,所以在模块内定义一个变量和函数在外部是不可见的,除非使用export导出,在其他模块使用import导入。

默认导出:

每个模块都可以有一个default导出。 默认导出使用 default关键字标记;并且一个模块只能够有一个default导出。 需要使用一种特殊的导入形式来导入 default导出。

类和函数声明可以直接被标记为默认导出。 标记为默认导出的类和函数的名字是可以省略的。

特殊情况:

为了支持CommonJS和AMD的exports, TypeScript提供了export =语法。

export =语法定义一个模块的导出对象。 这里的对象一词指的是类,接口,命名空间,函数或枚举。

若使用export =导出一个模块,则必须使用TypeScript的特定语法import module = require("module")来导入此模块

命名空间:

Namespace定义一个命名空间,命名空间也叫做内部模块,主要解决命名重复或者相似[使用命名空间是为了提供逻辑分组和避免命名冲突]。多文件中的命名空间,不同文件之间要存在一定的依赖关系,所以我们使用引用标签/// <reference path=””>来告诉编译器之间的关联.

别名:

使用import q = x.y.z给常用的对象起一个短的名字。 不要与用来加载模块的 import x = require('name')语法弄混了,这里的语法是为指定的符号创建一个别名。

命名空间和模块:

特性

命名空间(Namespace)

模块(Module)

作用域

全局作用域

独立作用域

依赖关系

不支持模块加载器

支持模块加载器(CommonJS、AMD、ES6等)

代码组织

内部代码组织

外部模块化开发

适用场景

小型项目或内部代码组织

大型项目和模块化开发

语法

namespace/export/import

export/import

运行效率

不生成模块加载代码,运行效率高

生成模块加载代码,支持动态加载

ES6兼容性

不兼容ES6模块规范

兼容ES6模块规范

补充:

在TypeScript中,declare关键字的核心作用是告诉TypeScript某个东西存在,但不需要关心它的实现。它只在编译阶段起作用,不会被编译成JavaScript代码。

装饰器的写法和作用?

装饰器是一种特殊类型的声明,它能够被附加到类声明方法, 访问符属性参数上。

注:装饰器工厂则是我们学习NestTs很重要的一个知识点,学习装饰器工厂的同时我们将引入一个ts另一个很重要的点,Reflect(反射,将是我们学习IOC控制反转,DI依赖注入原理的关键)。

装饰器根据它的附加位置类装饰器,属性装饰器,方法装饰器,参数装饰器,访问符装饰器;

执行顺序:正常的属性装饰器和访问符装饰器,方法装饰器在类中按从上到下执行(优先执行实例成员,再执行静态成员);方法中的参数装饰器按从右到左执行,参数装饰优先执行于该方法的方法装饰器;类的成员拥有多个同类型装饰器,按从近到远执行;最后执行构造函数的参数装饰器,再执行类装饰器。

类装饰器 function fn(constructor[被装饰类的构造函数]:Function){},我们可以通过类装饰器重载构造函数;

 方法装饰器

function fn(target: Object, propertyKey: string, descriptor: PropertyDescriptor){}

Target:如果被装饰方法是实例方法,target是类的原型;如果是静态方法,则是类的构造函数;propertyKey:是方法的名称(可能是字符串,也可能是符号symboi);descriptor:被装饰方法的属性描述符,其中它的value属性就是方法本身。

参数装饰器

function fn(target: Object, propertyKey: string, parameterIndex: number){}

Target和方法装饰器的一样;propertykey是被修饰方法的名称;parameterIndex则是参数列表中的索引。

访问器装饰器

function fn(target: any, propertyKey: string, descriptor: PropertyDescriptor) {}

target和方法装饰器一样;propertykey是访问器的名称;descriptor是访问器的属性描述符;

属性装饰器

function fn(target: any, propertyKey: string) {}

target和方法装饰器一样,properkey是属性名称

关键字Type的作用?

type 关键字用于声明 类型别名(Type Alias)。它允许你为一个类型创建一个新的名称,从而提高代码的可读性和复用性。type 关键字可以用于定义各种类型的别名,包括基本类型、联合类型、元组类型、对象类型等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值