文档
- 官网 / 声明模板
- TypeScript Github 内置类型定义 lib/lib.es5.d.ts
- Definitelytyped: 整理关于一些第三方包的 typescript 支持
- TypeScript Deep Dive ——>深入理解TypeScript
- TS入门教程
- TS 中文手册
- 可选操作链符
- Typescript 中文版
- The unknown Type in TypeScript
- Typescript Quickly
- JSDOC Reference: 关于 jsdoc 注释的使用
- awesome-typescript
utility-types: flowjs

博客
- the return type of function
- TypeScript: Built in generic types
- TypeScript 条件类型的 infer 类型推断能力
- TypeScript 高级类型-条件类型
- TypeScript 夜点心: 条件泛型
- 如何编写 TypeScript 声明文件
- 巧用TypeScript
- 常见设计模式概要及其实践-TypeScript 实现
- TypeScript 的 extends 条件类型
- 速查手册 TypeScript 高级类型
- 一份不可多得的TS的学习指南
- Typescript 强大的类型别名
- TypeScript 高手篇: 22个示例深入讲解TS最晦涩难懂的高级工具
- 1.2W 字 Typesciprt 了不起的入门教程
- 结合实例学习Typescirpt
-
视频
文章
介绍
被称之为加强版JS, JS为动态语言 只在运行执行时才能明确知道变量 / 参数的类型, 而 TS 在编写编译前就已经将类型固定, 等到有错误时提早发现以便不会在运行时出错
安装
使用 npm 全局安装 typescript 解析
npm install -g typescript
安装后需要对**TS**文件进行编译解析时需要配置 **tsconfig.json** 文件 可以通过 **tsc --init** 初始化配置
# 在目录文件下初始化 tsconfig.json 配置文件
tsc --init
npx tsc --init
# 查看其它帮助
tsc --help || tsc -h
# 监听文件修改实时编译, 在监视模式下运行编译器。会监视输出文件,在它们改变时重新编译
tsc --watch || tsc -w
参考 :How can I generate a tsconfig.json file?
构建第一个TS 文件以及添加 类型注释
function greeter(person) {
return 'Hello' + person;
}
let user = 'Jane User';
document.body.textContent = greeter(user);
// 对参数添加类型注释
function greeter(person: string) {
return 'Hello' + person;
}
编译运行代码
虽然以上第一段代码中显示为 JS, 仍旧可以使用 TS 编译器编译为何原本JS代码一样的代码, 第二段代码就已经添加了参数类型注释, 当在调用时, 传递的参数不是 string 类型时, 即报错
tsc greeter.ts
定义接口: 目前没有找到更合理更合适的解释, 理解为当单个参数使用参数注释定义时是可以的, 但假设涉及了比较复杂的参数或单个对象内无法自定义指定时 或者 多个参数时, 使用注释方法就不靠谱了, 这才有了接口就是按照指定的格式及类型定义的”模板”
interface Person {
firstName: string;
lastName: string;
}
// 此处定义了 Person 接口, 指定了 必须要包含有 firstName(string 类型) 以及 lastName(string 类型)
function greeter(person: Person) {
return 'Hello' + person.firstName + ' ' + person.lastName;
}
let user = { firstName: 'Jane', lastName: 'User' };
document.body.textContent = greeter(user);
手册
声明
在没有提供函数实现的情况下, 有两种声明函数类型的方式
// 返回类型注解
interface Foo {
foo: string;
}
function foo(sample: Foo): Foo {
return sample
}
function foo(sample: Foo) {
return sample; // 可以不手动添加注解, 编译器推断
}
// 可选参数, 通常情况下个人喜欢超过三个及以上参数时使用对象来接收, 不需要考虑到顺序问题
interface Foo {
width: number;
height?: number;
}
function foo(width: number, height?: number) {
return width + height;
}
声明
全局声明文件
无论是你使用TS来书写你的项目或者发布NPM包时, 通常都会在某一个地方声明类型接口等之类的文件, 当一个项目足够大或者复杂时会出现比较多的重复的声明, 你可以在全局管理一些比较通用的模块声明, 通过使用 declare 关键词, 告诉 Typescript 来表述一个其他地方已经存在了声明, 在实际项目里, 可以使用 globals.d.ts 或者 vendor.d.ts 文件, 如果一个文件扩展名是 .d.ts 这意味着每个顶级的声明都必须以 declare 关键字作为前缀, 例如 node.d.ts
例如:
declare var foo: any // 声明一个全局的 foo 类型的定义
declare type $FIXME = any;
类型系统
第三方代码
例如将JS项目改成TS项目, 某些第三方文件或者模块是没有指定类型的, 此时你需要使用声明文件将其导入可以检测类型, 更多的参考(DefinitelyTyped)
非JS资源
可以参考 ant-design 中的自定义声明文件
declare module '*.css';
declare module '*.html';
使用
通过配置 tsconfig.json 中的 compilerOptions.types引入有意义的类型
{
"compilerOptions": {
"types": [
"jquery",
],
},
}
