和customeType一样

时间:2017-11-21 10:14:37

标签: angular typescript typescript-typings typescript2.0 angular5

我正在研究打字稿中的latest angular code并转到以下行:

const scope = self as any as ServiceWorkerGlobalScope;

我上面不了解的是:如果类型为self,为什么要将其转换为ServiceWorkerGlobalScope?为什么不像以下那样将其声明为ServiceWorkerGlobalScope:

const scope = self as ServiceWorkerGlobalScope;

const scope : ServiceWorkerGlobalScope = self;

这条线是什么意思?这是否意味着范围是最喜欢类型为ServiceWorkerGlobalScope的类型?

1 个答案:

答案 0 :(得分:1)

如果您使用简化:

const scope : ServiceWorkerGlobalScope = self;

TypeScript将针对类型self检查ServiceWorkerGlobalScope的结构。如果它发现类型不兼容,您将收到以下错误:

  

键入' Window'无法转换为' ServiceWorkerGlobalScope'。     财产' ...'类型' Window'

中缺少

首先将self移入any类型,然后在any类型和ServiceWorkerGlobalScope类型之间执行检查。在这种情况下,any与"任何"兼容其他类型,没有警告。

这与适用于类型断言的流相同,您可以尝试类型断言:

x = <ServiceWorkerGlobalScope>y

但是类型断言仍然执行类型检查。如果你想&#34;选择退出&#34;在类型检查中,您使用any类型作为中介:

x = <ServiceWorkerGlobalScope><any>y