《TypeScript开发实战》是极客时光的一门课程,由搜狗营销事业部中级架构师梁晓老师出品,共47章,涵盖了TypeScript的所有用法以及我们如何在实战中应用TS。 本课程还额外涵盖了一些后端基础内容,例如webpack配置、react编程范式,特别适合初学者。
以下是老师整理的TypeScript实际内容:
这里是项目相关代码的github链接,
由于我对TS有一点了解,所以我以1.5的倍数观看了整个过程。 下面我将课程的全部内容整理一下,
基本的
一般编程语言根据类型分为强类型和弱类型、动态类型和静态类型。 JS 是一种弱类型动态语言。 在类型转换的过程中,它隐式帮你做了很多操作,降低了开发难度。前端typescript实战,同时也带来了一些隐患。 类型转换是在不需要类型转换的情况下进行的,或者某些动态类型转换导致代码运行异常,只有运行时才知道。 TS 是一种强类型静态语言,具有强大的类型系统。 除了在开发阶段推断类型之外,还给开发带来了便利。 同时,它为每个变量函数声明了类型,这有助于代码维护和构建。 正如讲师所说,TS的ROI(投资回报率)是钩形的。 不允许开展大型、短期项目。 需要多人合作的项目越多,生命周期越长,回报率就越高。
如何搭建TS环境,请自行百度。 或者通过网站运行 TS,
let hello: string = 'Hello TypeScript';
document.querySelectorAll('.app')[0].innerHTML = hello;
ES6 中的基本类型,Boolean、Number、String、Array、Function、Object、Symbol、undefined、null。
TS数据类型包含了ES6中的所有类型,还增加了一些新的类型,void、any、never、tuple、枚举、中间类型。
通过关键字enum来实现
enum Role {
teacher: 1,
children: 2,
other: 3
}
const childrenType: Role = Role[children];
interface List {
id: number,
name: string
}
interface Result {
data: List[]
}
let result: Result = {
data: [
{ id: 1, name: 'A' },
{ id: 2, name: 'B' }
]
};
其实socket还可以实现约束功能
interface Add {
(x: number, y: number): number
}
let add: Add = (x, y) => x + y;
其实也可以使用类型约束,使用关键字type
type Add = (x: number, y: number) => number
let add: Add = (x, y) => x + y;
ts中添加类型注释
class Dog {
constructor(name: string) {
this.name = name
}
static food: string = 'bones';
public run() {}
protected ;
private say = 'wangwang';
readonly dog = 'dog';
}
class Husky extends Dog {
constructor(name: string, color: string) {
super(props);
this.color = color
}
color: string
}
具体类,使用关键字abstract,只能被继承,不能被实例化。 表征类可以实现多态性。
abstract class Animal {
eat() {
console.log('eat');
}
// 抽象方法可以不在父类中实现
abstract sleep(): void
}
const animal = new Animal(); // error
class Dog extends Animal{
constructor(name: string) {
super();
this.name = name;
}
run() {}
sleep() {
console.log('dog sleep');
}
}
const dog: Dog = new Dog('small dog');
dog.eat() // eat;
dog.sleep(); // dog sleep
type和socket的关系,借用课程的一张图,入侵和删除。
套接字可以互相继承,类也可以互相继承,实现复用。 套接字可以由类来实现,并且套接字只能约束该类的公共成员。
简单来说,也是动态传入类型,实现类型的灵活性。 也可以理解为数据类型是没有预先确定的,具体类型只有在使用的时候才会确定。
function add(x: T, y: T): T {
return x + y;
}
add(1, 2);
为了语言灵活性,引入了中间类型
十字型
crossover类型需要实现所有socket方法
interface DogInterface {
run() {}
}
interface CatInterface {
jump() {}
}
class Dog implements DogInterface & CatInterface {
run() {}
jump() {}
}
联合型
使代码具有非确定性,提高代码的灵活性。
let a: number | string = 'a';
a = 1;
let b: 'a' | 'b' | 'c';
let c: 1 | 2 | 3;
索引类型、映射类型、条件类型使用场景相对较少,使用时即可查询。
工程文章和实用文章
新建一个ts项目
yarn install -g tsc
tsc 'project'
这样才能创建一个新的TS项目,同时生成一个tsconfig.json文件。
如果某个目录下存在 tsconfig.json 文件,则说明该目录是 TypeScript 项目的根目录。 tsconfig.json 文件指定用于编译项目的根文件和编译选项。 (摘自html英文网站)
,有项目所需配置项的说明。
通常我们都是基于后端框架的,很难不依赖像VsCode这样的任何后端框架,所以我们在选择编译工具的时候最好不要使用ts-loader,因为它缺乏插件支持,但TS官方团队也选择与Babel合作,与现有后端生态兼容,因此推荐Babel。
如果我们需要在现有的项目中使用TS,我们需要遵守几个原则,共存原则、折边原则和严格原则。 根据字面意思,我们可以选择配置tsconfig.json配置项,设置不同对的严格级别。 而且我建议对某些部分启动严格模式,首先是项目的一小部分,其他部分采取自我培育的原则,这样项目才能正常发展并逐步迁移。
总结
本课程全面讲解 TS。 是否支持梁老师就看你的意愿了,我是通过极客时间发给我的7天试用面卡观看视频的。 《React高级实战》我也看完了,稍后会发。 专注于可以做出改变的领域前端typescript实战,并与你一起鼓励自己。
撰写时间:20190915