阅读 101

TypeScript 基础语法——高级类型

联合类型

联合类型也叫多选类型,通常用于我们需要标注的变量为其中之一时

function(id:number,username:string,value:string|number):void{} 复制代码

交叉类型

交叉类型也称合并类型

interface o1{x:number,y:string} interface o2{z:number} let o:o1&o2 = Object.assign({},{1,'hello world'},{2}) 复制代码

字面量类型

有的时候,我们希望标注的不是某个类型,而是一个固定值,就可以使用字面量类型,配合联合类型会更有用

    function setPosition(ele: Element, direction: 'left' | 'top' | 'right' | 'bottom') { // ... } // ok box && setDirection(box, 'bottom'); // error box && setDirection(box, 'hehe'); 复制代码

类型别名

有的时候类型标注比较复杂,这个时候我们可以类型标注起一个相对简单的名字

type dir = 'left' | 'top' | 'right' | 'bottom'; function setPosition(ele: Element, direction: dir) { // ... } 复制代码

使用类型别名定义函数类型

这里需要注意一下,如果使用 type 来定义函数类型,和接口有点不太相同

type callback = (a: string) => string; let fn: callback = function(a) {}; // 或者直接 let fn: (a: string) => string = function(a) {} 复制代码

interface 与 type 的区别

interface

只能描述 object / class / function 的类型

同名 interface 自动合并,利于扩展

type

不能重名

能描述所有数据

类型断言

有的时候,我们可能标注一个更加精确的类型(缩小类型标注范围),比如:

let img = document.querySelector('#img'); 复制代码

我们可以看到 img 的类型为 Element,而 Element 类型其实只是元素类型的通用类型,如果我们去访 问 src 这个属性是有问题的,我们需要把它的类型标注得更为精确:HTMLImageElement 类型,这个 时候,我们就可以使用类型断言,它类似于一种 类型转换:

let img = <HTMLImageElement>document.querySelector('#img'); 复制代码

或者

let img = document.querySelector('#img') as HTMLImageElement;


作者:GW
链接:https://juejin.cn/post/7022794355534462989


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐