• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

TypeScript的高级用法(持续更新)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

为什么要使用TypeScript?

某乎已经解释的很清楚了传送门

我目前亲身的感受,TpeScript带来的好处

  • 类型系统可以避免很多js的灵活性带来的隐藏bug,譬如在js里变量是可以到处定义,到处赋值,这就会导致中途你都不知道改成什么类型了,会不会有bug
  • 团队协作代码风格更加严格,这一般是强类型编程语言所带来的特性之一,譬如很典型的Java,C#等

TpeScript香是香,只是使用中会带来以下问题。

  • 入手门槛高,招人的门槛也高了不少
  • 不习惯这么严格的语法,导致最后写成AnyScript,四不像

TypeScript的高级用法

支持”函数定义“

type Foo<T> = T
let nums: Foo<number> = 1

上面可以理解为

function Foo (T: any) {
  return T
}

如果我们对T的类型做限制

type foo<T extends string> = T;

则可以理解为

function Foo (T: string) {
  return T
}

当然了,我们也可以给T一个默认值

type Foo<T extends string = 'Hello World'> = T;

可以理解为:

function Foo (T: string = 'Hello World') {
  return T
}

支持条件判断

T extends Z ? X : Y

e.g.

type IsNumber<T> = T extends number ? 'this is a number' : 'this is not a number';

动态推导出联合类型

interface Student {
  name: string;
  age: number;
}

type studentKey = keyof Student; // "name" | "age"

遍历联合类型

通过 in 关键字

type key = 'vue' | 'react';

type MappedType = { [k in key]: string } // { vue: string; react: string; }

通过 索引

type frameworks = ['vue', 'react', 'angular'];
type f0 = frameworks[0]
type f1 = frameworks[1]
type f2 = frameworks[2]
type fa = frameworks[any]

全局作用域

declare module '*.png';
declare module '*.svg';
declare module '*.jpg';

模块作用域

就像 nodejs 中的模块一样,每个文件都是一个模块,每个模块都是独立的模块作用域。这里模块作用域触发的条件之一就是使用 export 关键字导出内容。

每一个模块中定义的内容是无法直接在其他模块中直接获取到的,如果有需要的话,可以使用 import 关键字按需导入。

参考:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
TypeScript Crash Course: Property Access Modifiers发布时间:2022-07-18
下一篇:
使用TypeScript开发程序发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap