Typescript | 青训营笔记

52 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

TS的优点?

Typescript 是一个强类型的 JavaScript 超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等。Typescript并不直接在浏览器上运行,需要编译器编译成纯Javascript来运行。 增加了静态类型,可以在开发人员编写脚本时检测错误,使得代码质量更好,更健壮。
优势:
1. 杜绝手误导致的变量名写错;
2. 类型可以一定程度上充当文档;
3. IDE自动填充,自动联想;

TypeScript 中 any 类型的作用是什么?

为编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们跳过编译阶段的检查。

TypeScript 中 any、never、unknown、null & undefined 和 void 有什么区别?

any: 动态的变量类型(失去了类型检查的作用)。
never: 永不存在的值的类型。例如:never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。
unknown: 任何类型的值都可以赋给 unknown 类型,但是 unknown 类型的值只能赋给 unknown 本身和 any 类型。
null & undefined: 默认情况下 null 和 undefined 是所有类型的子类型。 就是说你可以把 null 和 undefined 赋值给 number 类型的变量。当你指定了 --strictNullChecks 标记,null 和 undefined 只能赋值给 void 和它们各自。
void: 没有任何类型。例如:一个函数如果没有返回值,那么返回值可以定义为void。

类型体操

  • returnType<> 获取函数返回值类型

  • Parameters<> 获取函数参数类型

  • 传入类型, 生成对应数组

    • typeToArray 生成 number[]
    • typeToArray<string | number> 生成 string[] | number[]
  • Partial<> / Required<> / Readonly<> 将对象类型item都转为 可选 / 必选 / 只读 类型

  • Record<K, V>限制对象Key Value

    • 传入K为联合类型, 返回对象根据不同K有相同类型的都Value
  • Exclude / Extract / NonNullable 移除 / 保留 联合类型中的部分类型

作者:tsja
链接:juejin.cn/post/718983…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

TypeScript 中 type 和 interface 的区别?

相同点:

  1. 都可以描述 '对象' 或者 '函数'
  2. 都允许拓展(extends)

不同点:
type

  • type可以定义 基本类型的别名,如 type myString = string
  • type可以通过 typeof 操作符来定义,如 type myType = typeof someObj
  • type可以申明 联合类型,如 type unionType = myType1 | myType2
  • type可以申明 元组类型,如 type yuanzu = [myType1, myType2]

interface可以 声明合并

使用 interface 描述‘数据结构’,使用 type 描述‘类型关系’

String、Number、Boolean、Symbol、Object如何声明

let decLiteral: number = 6;
let isDone: boolean = false;
let sym: symbol = Symbol();
interface Person {
 name: string;
 age: number;
}