陈高峰_发现问题,解决问题! Java/Go架构师_前端专家_Java/Go/Javascript/Rust/C/C++/物联网/Python/人工智能/数学/英语

学习 TypeScript 从入门到精通的练手项目建议

通过一系列由浅入深的项目练习,可以有效地学习和掌握 TypeScript。以下是一些递进的项目建议,供你参考: 1. 基础类型和语法练习 难度:初级 目标:熟悉 TypeScript 的基本类型、接口、类、函数和类型注解。 描述:重写一些简单的 JavaScript 程序,用 TypeScript

chengaofeng chengaofeng 发布于 2024-12-03

学习 fp-ts 函数式编程从入门到精通的练手项目建议

通过一系列由浅入深的项目练习,可以帮助你有效地学习和掌握 fp-ts 及其在 TypeScript 中的应用。以下是一些递进的项目建议,供你参考: 1. 基础类型与函数练习 难度:初级 目标:熟悉 fp-ts 的基本类型(如 Option、Either)、纯函数概念和基本使用。 描述:编写简单的函数

chengaofeng chengaofeng 发布于 2024-12-03

学习TypeScript函数式编程从入门到精通的练手项目建议

通过一系列由浅入深的项目练习,可以有效地学习和掌握TypeScript的函数式编程。以下是一些递进的项目建议,供你参考: 1. 基础函数练习 难度:初级 目标:熟悉TypeScript的基本语法、函数定义和调用、类型注解。 描述:编写简单的函数,例如计算两个数的和、求数组的平均值等,练习纯函数的概念

chengaofeng chengaofeng 发布于 2024-12-03

JavaScript数据结构与算法教程

前言 欢迎阅读《JavaScript数据结构与算法教程》,本书旨在为JavaScript开发者提供一个全面的数据结构与算法学习指南。无论您是初学者还是有经验的开发者,本书都将帮助您深入理解数据结构与算法的核心概念,并将其应用于实际的编程问题中。 本书采用西蒙学习法、费曼学习法和艾宾浩斯记忆曲线等学习

chengaofeng chengaofeng 发布于 2024-09-12

Javascript知识点枚举,仅枚举知识点,不做解释

变量(Variables) 数据类型(Data Types) 运算符(Operators) 条件语句(Conditional Statements) 循环(Loops) 函数(Functions) 作用域(Scope) 闭包(Closures) 回调函数(Callback Functions) 箭头

chengaofeng chengaofeng 发布于 2024-09-04

Javascript多线程涉及哪些概念与思想?

JavaScript 的多线程编程主要通过 Web Workers 和一些高级 API 来实现。以下是一些关键概念和思想: 1. 单线程模型 JavaScript 在浏览器环境中运行在单线程模型下,这意味着同一时间只能执行一个任务。事件循环(Event Loop)是 JavaScript 处理异步操

chengaofeng chengaofeng 发布于 2024-09-02

如何理解javascript的迭代器?

JavaScript 的迭代器(Iterator)是一个对象,它提供了一种机制来遍历集合(如数组、字符串、Map、Set 等)。迭代器对象实现了一个 next 方法,每次调用该方法会返回一个包含两个属性的对象:value 和 done。 迭代器的基本概念 迭代器对象:实现了 next 方法的对象。

chengaofeng chengaofeng 发布于 2024-08-30

Javascript的Array.isArray有哪些局限性?

Array.isArray 是 JavaScript 中用于判断一个值是否为数组的标准方法。尽管它在大多数情况下都非常有用,但它也有一些局限性和潜在的缺点: 仅限于数组类型: Array.isArray 只能判断一个值是否为数组,而不能判断其他类型(如对象、字符串等)。如果你需要判断其他类型的数据,

chengaofeng chengaofeng 发布于 2024-08-28

实现一个类typescript的AOT语言,需要掌握哪些技术?

要实现一个类似 TypeScript 的 AOT(Ahead-of-Time)编译语言,需要掌握和应用以下技术和知识领域: 1. 编译器设计 词法分析(Lexical Analysis):将源代码转换为一系列标记(tokens)。 语法分析(Syntax Analysis):将标记序列转换为抽象语法

chengaofeng chengaofeng 发布于 2024-08-21

AOT编译和 JIT编译的区别

AOT(Ahead-of-Time)编译和 JIT(Just-in-Time)编译是两种不同的编译技术,它们在编译时机、性能和应用场景上有显著的区别。 AOT(Ahead-of-Time)编译 定义 AOT 编译是在应用运行之前,将源代码编译为机器码(本机代码)。这种编译通常发生在构建阶段。 特点

chengaofeng chengaofeng 发布于 2024-08-21

Javascript中需要掌握的概念和思想

JavaScript 是一种功能强大且灵活的编程语言,广泛用于 Web 开发。以下是 JavaScript 中需要掌握的主要概念和思想: 基本语法和数据类型: 变量声明(var, let, const) 基本数据类型(Number, String, Boolean, Null, Undefined,

chengaofeng chengaofeng 发布于 2024-08-15

Typescript如何限制两个对象的key相同

export interface ListCardProps { height?: number; moreText?: string; tabList: Record<string, React.ReactNode>; contentList?: Record< strin

chengaofeng chengaofeng 发布于 2024-08-03

Typescript条件类型

// 直接使用联合类型判断,ts会将其视为整体进行判断,而不是一个一个进行判断 type Test = string | number | boolean extends string ? string : never; // never type Test2 = string extends st

chengaofeng chengaofeng 发布于 2024-08-01

怎么理解typescript的类型映射?

TypeScript的类型映射(Mapped Types)是一种强大的特性,允许你基于现有类型创建新的类型。类型映射通常用于对类型进行批量操作,比如将所有属性设为可选、只读,或者将属性类型进行转换。 以下是一些常见的类型映射示例: 1. 基本类型映射 假设你有一个接口Person: interfac

chengaofeng chengaofeng 发布于 2024-07-31

Typescript类型体操

TypeScript 的类型体操(TypeScript Type Manipulation)是指通过类型系统进行复杂的类型操作和推断,以实现更灵活和强大的类型检查。 in keyof 跟 for ... in 相似,不过 in keyof 是用来操作类型的 interface Person {

chengaofeng chengaofeng 发布于 2024-07-25

怎么理解TypeScript 结构类型系统

在 TypeScript 中,类型系统是基于结构类型(structural typing)而不是名义类型(nominal typing)。这意味着 TypeScript 关注的是类型的形状(结构),而不是它们的名字或声明方式。只要两个类型的结构兼容,它们就可以互相赋值。 结构类型系统的理解 结构匹配

chengaofeng chengaofeng 发布于 2024-07-25

Typescript子类和父类兼容的规则是怎样的?

在 TypeScript 中,子类和父类的兼容性规则遵循面向对象编程的基本原则,即子类可以被视为父类的实例。这种兼容性主要体现在以下几个方面: 子类实例可以赋值给父类类型的变量: 子类继承了父类的所有属性和方法,因此子类实例可以赋值给父类类型的变量。 方法重载和重写: 子类可以重写父类的方法,但必须

chengaofeng chengaofeng 发布于 2024-07-25

Typescript中如何判断两个类型是兼容?

在 TypeScript 中,可以通过以下几种方式来判断两个类型是否兼容: 使用类型断言:通过类型断言可以将一个类型转换为另一个类型,如果类型不兼容,TypeScript 会报错。 使用类型守卫:通过类型守卫可以在运行时检查类型。 使用类型条件:通过条件类型可以在编译时检查类型。 以下是一些示例代码

chengaofeng chengaofeng 发布于 2024-07-25

Typescript深入infer

infer的定义 infer 表示在 extends 条件语句中以点位符出现的等到使用时才推断出来的数据类型 type Fn = (params: string) => number; // 第一种应用场景:获取函数的返回值类型 type TypeReturn = Fn extends (...ar

chengaofeng chengaofeng 发布于 2024-07-25

Typescript的类型协变和逆变

在 TypeScript 中,类型的协变(Covariance)和逆变(Contravariance)描述的是在类型系统中,类型之间的关系如何随着类型操作(如函数参数和返回类型)的方向而改变。这些概念主要在函数类型的参数和返回值的类型关系中体现。 协变(Covariance) 协变指的是能够保持类型

chengaofeng chengaofeng 发布于 2024-07-24

Typescript函数重载

为什么要用函数重载? enum MessageType { "Image" = "Image", "Audio" = "Audio", } type Message = { id: number; type: MessageType; content: string; };

chengaofeng chengaofeng 发布于 2024-07-23

js的模块化是不是就相当于单例模式?

JavaScript 的模块化不完全等同于单例模式,但在某些方面它们之间确实存在相似之处。下面是两者的比较: 单例模式: 单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。 在单例模式中,无论你尝试创建多少次对象,都只会得到同一个实例。 单例模式通常用于管理共享资源,如数据库连接

chengaofeng chengaofeng 发布于 2024-07-22

Typescript泛型

为什么要使用泛型?泛型定义 泛型的特点 泛型的宽泛:定义时不明确使用时必须明确成某种具体数据类型的数据类型 泛型的严谨:编译期间进行数据类型检查的数据类型 泛型形参类型一般有两种表示:1. A-Z任何一个字母 2. 语义化的单词来表示 class ArrayList<T> { array: Ar

chengaofeng chengaofeng 发布于 2024-07-18

Typescript类型守卫、类型转换、自定义守卫

类型断言 let a: A let b: B = a as B 绕过TS编译检查,类型断言就是告诉编译器我是这个类型,无需检查 类型必须有重合才能断言 类型断言应用场景: class Animal { name: string; constructor(name: string) {

chengaofeng chengaofeng 发布于 2024-07-16

深入TS需要掌握的JS技术

ES5原型继承 function Animal(name) { this.name = name; } Animal.prototype.eat = function () { console.log(this.name + " is eating."); }; function Dog

chengaofeng chengaofeng 发布于 2024-07-16

Typescript5.5新特性

TypeScript 5.5 引入了类型谓词的自动推断,这是由 Dan Vanderkam 实现的。这项特性改进了 TypeScript 在控制流分析中对变量类型变化的跟踪能力,特别是在处理数组和过滤操作时。 类型谓词自动推断 在之前的 TypeScript 版本中,即使通过过滤操作移除了 unde

chengaofeng chengaofeng 发布于 2024-07-15

tsconfig.json核心配置和系列相关问题

{ "compilerOptions": { /* 访问 https://aka.ms/tsconfig 以了解更多关于此文件的信息 */ /* 项目 */ // "incremental": true, /*

chengaofeng chengaofeng 发布于 2024-07-15

Typescript中方法拦截器的应用

TypeScript 中没有内置的“方法拦截器”,但可以通过几种方式模拟方法拦截的行为,主要是利用高级类型和装饰器(Decorators)功能。方法拦截器通常用于在方法调用前后执行一些逻辑,比如日志记录、性能监控、验证等。 Object.getOwnPropertyDescriptor实现 clas

chengaofeng chengaofeng 发布于 2024-07-14

中间件与方法拦截器的区别

中间件和方法拦截器都是在软件开发中用于处理请求或调用的技术,它们可以在执行某些操作之前或之后添加额外的处理逻辑。尽管它们的目的相似,但它们在应用场景和实现方式上有所不同。 中间件(Middleware) 中间件是一种位于请求处理流程中的软件组件,通常用于处理HTTP请求。它可以对请求进行预处理,然后

chengaofeng chengaofeng 发布于 2024-07-14

TypeScript装饰器应用场景:日志记录

写一个装饰器自动记录类的方法调用信息,包括参数、返回值和执行时间,有助于调试和监控应用行为。 以下是一个使用TypeScript装饰器来实现日志记录功能的示例。这个装饰器会自动记录任何被装饰方法的调用信息,包括方法名、传入的参数、返回值以及方法的执行时间。 首先,定义一个方法装饰器Log: func

chengaofeng chengaofeng 发布于 2024-07-11

Typescript装饰器的应用场景有哪些

TypeScript装饰器提供了一种强大的模式,用于在声明时添加元数据和行为逻辑,而无需修改原有类、方法或属性的代码。装饰器的应用场景非常广泛,以下是一些常见的应用场景: 日志记录:自动记录类的方法调用信息,包括参数、返回值和执行时间,有助于调试和监控应用行为。 性能监测:测量方法执行时间,用于性能

chengaofeng chengaofeng 发布于 2024-07-11

Typescript中包装对象类型与字面量类型

总结:本文看一下了解即可,建议只使用小写类型,不使用大写类型。 JavaScript 的8种类型之中,undefined和null其实是两个特殊值,object属于复合类型,剩下的五种属于原始类型(primitive value),代表最基本的、不可再分的值。 boolean string numb

chengaofeng chengaofeng 发布于 2024-07-10

Typescript中的概念和思想

8种基本类型:string、number、boolean、undefind、null、object、symbol、bigint(ES2020 标准引入) 特殊值:undefind、null 复合类型:object 原始类型:string、number、boolean、symbol、bigint(ES

chengaofeng chengaofeng 发布于 2024-07-10

怎么理解Typescript的void

在TypeScript中,void类型用于表示没有任何类型,通常用在函数的返回类型上,表示该函数没有返回值。这意味着,如果一个函数被标记为返回void,它不应该返回任何值。 理解void的关键点如下: 函数返回值:当一个函数的返回类型被指定为void时,这意味着这个函数不返回任何值。你可以在函数体内

chengaofeng chengaofeng 发布于 2024-07-07

Typescript中接口重名会合并,可以利用这个特性来扩展三方库的接口

在TypeScript中,接口(interface)是开放的,这意味着你可以在任何地方声明同名的接口,TypeScript编译器会自动将它们合并。这种特性被称为接口合并(Interface Merging)。你可以利用这个特性来扩展第三方库中的接口。 例如,如果你正在使用一个第三方库,它定义了一个接

chengaofeng chengaofeng 发布于 2024-07-04

什么是typescript自定义守卫?

TypeScript中的自定义类型守卫(Custom Type Guards)是一种特殊的函数或表达式,用于在运行时检查一个值是否属于特定的类型。通过使用类型守卫,TypeScript编译器能够在特定的作用域内准确地推断出值的类型,从而提供更严格的类型检查和更智能的代码自动完成等功能。 自定义类型守

chengaofeng chengaofeng 发布于 2024-07-04

Object 和 unknown 的区别是什么?

在TypeScript中,Object和unknown类型都代表某种程度上的类型不确定性,但它们在类型安全性方面有着本质的区别: Object类型是一个非原始类型的顶级类型,它可以接受任何非原始(即非number、string、boolean、symbol、null或undefined)的值。使用O

chengaofeng chengaofeng 发布于 2024-07-04

Typescript核心语法

开始 什么是Typescript? 融合了后端面向对象思想的超级版的javascript语言,为javascript补充了类型系统 环境搭建 mkdir demo cd demo npm init -y npm i pnpm -g # 局部安装,也可以全局安装,但建议局部安装 pnpm add t

chengaofeng chengaofeng 发布于 2024-06-30