TypeScript(四)相关语法操作

126 阅读2分钟

相关语法操作

&和|操作符

1001 | 1010 = 1001 // 合并1
1001 & 1010 = 1000 // 只保留共有1

在TypeScript中的表现:

interface IA {
    astring
    bnumber
}
​
type TB = {
    bnumber
    cnumber[]
}
​
type TC = IA | TB// TC类型的变量的键只需包含ab或bc即可,当然也可以abc都有
type TD = IA & TB// TD类型的变量的键必须包含abc

对于这种表现,可以这样立即:&表示必须同时满足多个契约,|表示满足任意一个契约即可。

extends关键字

在TypeScript中,extends既可当做一个动词来扩展已有类型;也可以当做一个形容词来对类型进行条件限定(例如用在泛型中)。在扩展已有类型时,不可以进行类型冲突的覆盖操作。例如,基类型中键a为string,在扩展出的类型中无法将其改为number。

type A = {
    anumber
}
​
interface AB extends A {
    bstring
}
​
// 与上一种等价
type TAB = A & {
    bstring
}

条件类型

除了与、或等基本逻辑,TS的类型也支持条件运算,其语法与三目运算符相同,为T extends U ? X : Y。 这里先举一个简单的例子。在后文中我们会看到很多复杂类型的实现都需要借助条件类型。

type IsEqualType<A, B> = A extends B ? (B extends A ? true : false) : false;
type NumberEqualsToString = IsEqualType<numberstring>; // false
type NumberEqualsToNumber = IsEqualType<numbernumber>; // true

环境Ambient Modules

在实际应用开发时有一种场景,当前作用域下可以访问其变量,但这个变量并不由开发者控制。例如通过Script标签直接引入的第三方库CDN、一些宿主环境的API等。这个时候可以利用TS的环境声明功能,来告诉TS当前作用域可以访问这些变量,以获得类型提醒。

具体有两种方式,declare和三斜线指令

declare const IS_MOBILE = true// 编译后此行消失
const wording = IS_MOBILE ? '移动端' : 'PC端';

用三斜线指令可以一次性引入整个类型声明文件

/// <reference path="../typings/monaco.d.ts" />
const range = new monaco.Range(2367);