我正在研究 latest angular code这是 typescript 并来到以下行:
const scope = self as any as ServiceWorkerGlobalScope;
上面我不明白的是:如果类型 self 是 any 为什么要将它转换为 ServiceWorkerGlobalScope?为什么不像下面这样将它声明为 ServiceWorkerGlobalScope:
const scope = self as ServiceWorkerGlobalScope;
或
const scope : ServiceWorkerGlobalScope = self;
那一行是什么意思?这是否意味着范围是最喜欢类型 ServiceWorkerGlobalScope 的任何类型?
最佳答案
如果你使用简化的:
const scope : ServiceWorkerGlobalScope = self;
TypeScript 将检查 self
的结构针对类型 ServiceWorkerGlobalScope
.如果它发现类型不兼容,您将收到如下错误:
Type 'Window' cannot be converted to type 'ServiceWorkerGlobalScope'. Property '...' is missing in type 'Window'.
通过移动 self
进入any
首先键入,然后在 any
之间执行检查类型和 ServiceWorkerGlobalScope
类型。在这种情况下,any
与“任何”其他类型兼容,并且没有警告。
这与应用于类型断言的流程相同,您可以尝试类型断言:
x = <ServiceWorkerGlobalScope>y
但是类型断言仍然执行类型检查。如果你想“选择退出”类型检查,你可以使用 any
输入中介:
x = <ServiceWorkerGlobalScope><any>y
关于angular - 与客户类型一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410483/