我正在研究打字稿中的latest angular code并转到以下行:
const scope = self as any as ServiceWorkerGlobalScope;
我上面不了解的是:如果类型为self,为什么要将其转换为ServiceWorkerGlobalScope?为什么不像以下那样将其声明为ServiceWorkerGlobalScope:
const scope = self as ServiceWorkerGlobalScope;
或
const scope : ServiceWorkerGlobalScope = self;
这条线是什么意思?这是否意味着范围是最喜欢类型为ServiceWorkerGlobalScope的类型?
答案 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