You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/** * Make all properties in T readonly */typeReadonly<T>={readonly[PinkeyofT]: T[P]}constreadOnly: <T>(obj: T)=>Readonly<T>=__DEV__
? (obj)=>Object.freeze(obj)
: (obj)=>objreadOnly<Location>({})
enum
// 数字枚举enumRole{Reporter,Developer,Owner,Guest,}// 字符串枚举enumMessage{Success='成功',Fail='失败',}// 异构枚举enumAnswer{N,Y='YES',}// 数字枚举enumChar{// const 常量枚举// 1. 没有初始值的情况// 2. 对已有枚举成员的引用// 3. 常量的表达式// 常量枚举成员会在编译时计算出结果,已常量的形式出现在运行环境a,b=Char.a,c=1+3,// computed 需要被计算的枚举成员,非常量的表达式。不会在编译阶段计算,保留在执行阶段// computed 枚举成员后面一定需要被赋予一个初始值,不然报错 "Enum member must have initializer.(1061)"d=Math.random(),e='123'.length,}console.log(Role)console.log(Message)console.log(Answer)// 常量枚举// 编译阶段会被移除// 当我们不需要一个对象而需要对象值的时候constenumMonth{Jan,Feb,Mar,}
1. 很多时候我们希望一个函数或者一个类可以支持多种数据类型,有很大的灵活性 2.泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定 3.泛型好处
a. 函数和类可以支持多种类型,增强程序的扩展性;
b. 不必写多条函数重载,冗余的联合类型声明,增强代码可读性;
c. 灵活的控制了类型之间的约束;
keyof
keyof 是 TypeScript 中的一个操作符,用于获取对象的所有属性名组成的联合类型。例如,对于以下对象:
使用 keyof 操作符可以获取 obj 的属性名组成的联合类型:
这个例子中,getProperty 函数接受一个对象 obj 和一个属性名 key,返回该对象中对应属性的值。K extends keyof T 表示 K 必须是 T 的属性名之一。
映射类型
只读 冻结
enum
数字枚举
字符串枚举
枚举类型
Interface
接口可以用来约束对象,函数,以及类的结构和类型,这是一种代码协作的契约
对象类型接口
函数类型接口
函数重载(要把最容易匹配的写在最前面)
Class
继承和成员修饰符
注意:类的属性都是实例属性而不是原型属性;方法是原型上的;
类里面的属性都需要有初始值
成员修饰符,这是 ts 对 js 的一种扩展
public:公有成员,类的默认属性都是 public,对所有人都是可见的
private:私有成员,只能在类的本身被调用,而不能被类的实例调用,也不能被子类调用
private contructor 给构造函数设置:这个类既不能实例化也不能被继承
protected: 受保护成员,只能在类和子类中访问,而不能在类的实例中访问
protected contructor:这个类不能被实例化,只能被继承,相当于声明了一个基类
readonly: 只读属性也一定要初始化,跟实例属性是一样的
static:类的静态成员,类的静态成员只能通过类名来调用,而不能通过子类来调用,可以被继承
除了类的成员可以添加修饰符之外,构造函数的参数也可以添加修饰符
作用:自动的将参数变成了实例的属性,这样我们就能省略在类中的定义了
抽象类与多态 (TS 对 JS 的扩展)
抽象类:
多态:
this 类型(TS 特殊类型)
Interface
泛型
泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定。
1. 很多时候我们希望一个函数或者一个类可以支持多种数据类型,有很大的灵活性
2.泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定
3.泛型好处
a. 函数和类可以支持多种类型,增强程序的扩展性;
b. 不必写多条函数重载,冗余的联合类型声明,增强代码可读性;
c. 灵活的控制了类型之间的约束;
一 泛型函数与泛型接口
使用泛型改造log函数
二 泛型类与泛型约束
类型检查机制
高级类型
交叉类型
联合类型
索引类型
映射类型
Readonly, Partial和 Pick是同态的,但 Record不是。 因为 Record并不需要输入类型来拷贝属性,所以它不属于同态:
非同态类型本质上会创建新的属性,因此它们不会从它处拷贝属性修饰符。
Readonly
Partial
Pick
Record
Omit
条件类型
tsconfig
模块解析策略
编译工具
https://www.npmjs.com/package/ts-loader
https://github.com/TypeStrong/fork-ts-checker-webpack-plugin#readme
https://www.npmjs.com/package/awesome-typescript-loader
代码检测工具
Jest 单元测试
Other
esModuleInterop
esModuleInterop
是 TypeScript 配置文件(tsconfig.json
)中的一个选项,它用于启用或禁用 ECMAScript 模块互操作性。当你的 TypeScript 项目使用 ECMAScript 模块(ESM)时,可能会涉及到与 CommonJS 模块一起使用的情况。
esModuleInterop
的作用是改善 TypeScript 处理这些情况的方式。具体来说,
esModuleInterop
主要解决以下两个问题:默认导入的问题:在 CommonJS 中,导入默认导出的语法通常是
require('module').default
,而在 ECMAScript 模块中是import module from 'module'
。这两者之间的不一致性会导致一些问题。启用esModuleInterop
后,TypeScript 允许你像 ES 模块一样导入默认导出,即import module from 'module'
。命名空间对象的问题:在 TypeScript 2.7 之前,当你导入一个 CommonJS 模块时,TypeScript 会创建一个额外的命名空间对象来包装模块导出,这可能导致一些类型问题。启用
esModuleInterop
后,TypeScript 不再创建这个额外的命名空间对象,使得导入的模块更符合 ES 模块的行为。因此,通常建议在 TypeScript 项目中启用
esModuleInterop
,以改善与 ECMAScript 模块互操作的体验。在tsconfig.json
中启用它的方式是:如果你正在迁移一个已存在的项目,启用
esModuleInterop
可能会导致一些现有的导入语句需要进行调整,但它有助于更好地处理不同模块系统之间的差异。Typescript 常用的类型函数,比如说 Pick Omit ReadOnly 等等
TypeScript 提供了许多有用的类型函数,用于操作和变换现有的类型。以下是一些常用的类型函数,以及它们的作用:
Pick<T, K>
:从类型T
中选择指定属性K
组成的新类型。Omit<T, K>
:从类型T
中排除指定属性K
组成的新类型。ReadOnly<T>
:将类型T
中的所有属性变为只读属性。Partial<T>
:将类型T
中的所有属性变为可选属性。Required<T>
:将类型T
中的所有属性变为必选属性。Record<K, T>
:创建一个包含属性键为K
,属性值为类型T
的对象类型。这些是 TypeScript 中常见的类型函数之一,它们可以帮助你更方便地定义和变换类型。有许多其他类型函数可用,具体使用取决于你的需求。
The text was updated successfully, but these errors were encountered: