前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第三十二期:对TypeScript的简单理解

第三十二期:对TypeScript的简单理解

作者头像
terrence386
发布2022-07-15 10:11:09
3730
发布2022-07-15 10:11:09
举报
文章被收录于专栏:JavaScript高级程序设计

我不喜欢写那些具体实现某个功能的东西,然后咔咔贴出来一堆代码。

因为如果我们真的需要去实现某个功能,那么首先我们自己就会去思考实现功能的方案,然后用代码将自己的想法变成现实,在这个从思考到实践的过程当中,才能真正的学习到我们想要的知识。

我更喜欢去分享一些思考的过程,或者说是学习的方法。

TypeScript

虽然从早几年TypeScript的热度已经非常高了,但是实际上除了大厂里某些项目是真正的用TS进行开发以外,其他的也还是我们现在写的es6语法居多,当然了,大厂里项目其实用TS开发的项目其实也不多。

如果对TS语法特别熟悉,那么我们可以做很多有趣的事情,比如我们可以毫无违和感的切换到Flutter的开发中去,因为Fullter使用的Dart语言,跟TypeScript的差别不大。我们也可以用白鹭引擎去开发一些游戏,因为语法跟TypeScript基本上是一样的。

很多人在学习TypeScript的时候,或者看到比较复杂的TypeScript代码会觉看不明白,不明白为什么要那样写。

比如这段代码:

代码语言:javascript
复制
export declare class Store<S> {
  constructor(options: StoreOptions<S>);

  readonly state: S;
  readonly getters: any;

  replaceState(state: S): void;

  dispatch: Dispatch;
  commit: Commit;

  subscribe<P extends MutationPayload>(fn: (mutation: P, state: S) => any, options?: SubscribeOptions): () => void;
 
 
}

export interface MutationPayload extends Payload {
  payload: any;
}

export interface Payload {
  type: string;
}

其实,只要我们理解了TypeScript能够解决什么问题,就可以很容易的看明白,也可以很容易的写出来TypeScript的代码。

我自己的理解是TypeScript基本解决的是类型检查的问题,可以提前发现我们代码中的错误,然后顺带着解决了文档的问题。TypeScript写习惯了,你会发现其实不用文档注释,我们也可以很轻松的知道代码里写的是什么。

上面的代码是从Vuex的源码中的类型定义的文件里复制的,它定义了一个名叫Store的类,构造函数的参数options是一个StoreOptions的类,它有两个只读属性state和getters,dispatch属性是Dispatch类,commit需要符合Commit的格式。

然后有一个subscribe方法。为什么subscribe是一个方法?因为按照平时的写法它应该这样写:

代码语言:javascript
复制
function subscribe (fn,options){
  console.log('subscribe')
}

然后它的参数fn接受两个参数mutation和state:

代码语言:javascript
复制
function fn (mutation,state){
  console.log('fn')
}

上面TS的中定义的subscript首先是一个函数,因为它最后的表现形式是:

代码语言:javascript
复制
()=>void

表示的是一个没有返回值的函数。

然后它接受两个参数,fn和options,options后面带了个问号,表示可选参数。

然后参数fn又是一个函数,fn自己也接受两个参数,mutiation和state,当然冒号后面声明了参数的类型。

举个例子,参数P 继承了 MutationPayload,MutationPayload又继承于interface 定义的Payload,其实就是这么个关系。

当然,真正能够灵活运用需要我们对它的基本概念有个深刻的理解,比如类,接口,泛型等等,这些需要我们自己去体会,去理解。

平时开发中,还是这种代码写的比较多一些:

代码语言:javascript
复制
function getAddress(province:string,village:string):string{
  return province + village;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript高级程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TypeScript
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档