python 网站开发框架,广告设计与制作视频,顺德网站优化,哈尔滨优化推广公司文章目录 1. 什么是 TypeScript#xff1f;它与 JavaScript 有什么区别#xff1f;2. TS 泛型、接口、泛型工具record、Pick、Omit3. TS unknow和any的区别#xff0c;如何告诉编译器unknow一定是某个类型#xff1f;4. 元组与常规数组的区别5. 什么是泛型,有什么作用… 文章目录 1. 什么是 TypeScript它与 JavaScript 有什么区别2. TS 泛型、接口、泛型工具record、Pick、Omit3. TS unknow和any的区别如何告诉编译器unknow一定是某个类型4. 元组与常规数组的区别5. 什么是泛型,有什么作用6. 什么是装饰器 1. 什么是 TypeScript它与 JavaScript 有什么区别
TypeScript 是一种由 Microsoft 开发的开源编程语言它是 JavaScript 的一个超集可以编译成纯 JavaScript。与 JavaScript 相比TypeScript 引入了静态类型、类、接口等概念以提供更好的代码可维护性、类型检查和开发体验。
TypeScript 的优势是什么
静态类型检查 TypeScript 允许声明变量、函数等的类型从而在开发过程中捕获潜在的类型错误。代码可读性 明确的类型声明使代码更易读懂和维护。智能感知 TypeScript 提供了更好的 IDE 智能感知增强了代码自动完成和提示功能。重构支持 类型信息可以帮助 IDE 在重构代码时更准确地识别变量和函数引用。代码提示 使用 TypeScript您可以在开发过程中获得更多的代码提示和文档。
TypeScript 中的基本类型有哪些
number: 数字类型string: 字符串类型boolean: 布尔类型null 和 undefined: 用于表示为空值void: 表示没有返回值的函数any: 表示任意类型object: 表示非原始类型的类型array: 数组类型tuple: 元组类型enum: 枚举类型
2. TS 泛型、接口、泛型工具record、Pick、Omit
泛型目的是在成员之间提供有意义的约束这些成员可以是类的实例成员、类的方法、函数参数和函数返回值。 Record它用来生成一个属性为 K类型为 T 的类型集合。 type Foo Recorda, string生成的对象key都为’a’value只能为string类型 Pick从 T 中将所有的 K 取出来并生成一个新的类型。 const foo: PickIFoo, a使用 Pick 生成的新类型只包含 a 属性 Omit用来忽略 T 中的 K 属性 type UserWithoutEmail OmitUser, email 忽略User中的email属性
3. TS unknow和any的区别如何告诉编译器unknow一定是某个类型
any任意类型放弃了ts类型检查允许对其进行任意操作unknow暂时未知类型之后仍然会进行ts检查使用时需要进行类型检查或类型断言后才能进行操作更加安全
将任何类型赋值给any类型的变量并执行任何操作和js相同。 将任何值赋值给unknow类型但是需要进行类型检查或者断言才可以进行操作。
1.类型断言
let value: unknow hello;
let length: number (value as string).length;2.类型判断
function func(value: unknow): void {if (typeof value string) {console.log(value.toUpperCase())} else if (Array.isArray(value)) {console.log(value.length)}
}4. 元组与常规数组的区别
TypeScript 中的元组是一个数组其中元素的类型、顺序和数量已知。例如[string, number] 元组类型期望第一个元素是字符串第二个元素是数字。常规数组只知道元素的类型而不知道顺序或计数。
5. 什么是泛型,有什么作用
泛型Generics是指在定义函数、接口或类的时候不预先指定具体的类型而在使用的时候再指定类型的一种特性。
function createArrayT(length: number, value: T): ArrayT {let result: T[] [];for (let i 0; i length; i) {result[i] value;}return result;
}
createArraystring(3, x); // [x, x, x]泛型约束在函数内部使用泛型变量的时候由于事先不知道它是哪种类型所以不能随意的操作它的属性或方法此时可以对泛型进行约束
// 对泛型T进行了约束一定含有一个length属性
interface Lengthwise {length: number;
}
function loggingIdentityT extends Lengthwise(arg: T): T {console.log(arg.length);return arg;
}
loggingIdentity(7);泛型作用泛型可以用在函数、接口、类 泛型优点
使用泛型的主要好处在于提高代码的复用性和灵活性。通过泛型我们可以编写不特定数据类型的代码使得这些代码可以适用于不同的数据类型。这样一来我们不需要为每种数据类型编写重复的代码从而减少了代码冗余。泛型还可以增加代码的可读性和可维护性。当我们在编写泛型代码时我们可以将代码逻辑和数据类型分离开来使得代码更加清晰和易于理解。同时泛型还可以在编译时进行类型检查提前捕获潜在的类型错误减少了运行时错误的可能性。另外泛型还使得我们可以更好地封装代码隐藏内部实现细节。这样可以提高代码的安全性并使得代码更易于维护和升级。
6. 什么是装饰器
装饰器是一种特殊类型的声明它能够被附加到类声明方法 访问符属性或参数上 是一种在不改变原类和使用继承的情况下动态地扩展对象功能 同样的本质也不是什么高大上的结构就是一个普通的函数expression 的形式其实是Object.defineProperty的语法糖 expression求值后必须也是一个函数它会在运行时被调用被装饰的声明信息做为参数传入 装饰器作用类、方法/属性、参数、访问器
function addAge(constructor: Function) {constructor.prototype.age 18;
}
addAge
class Person{name: string;age!: number;constructor() {this.name huihui;}
}
let person new Person();
console.log(person.age); // 18装饰器优点
代码可读性变强了装饰器命名相当于一个注释在不改变原有代码情况下对原来功能进行扩展
后面的使用场景中借助装饰器的特性除了提高可读性之后针对已经存在的类可以通过装饰器的特性在不改变原有代码情况下对原来功能进行扩展。