【发布时间】:2018-06-09 01:57:31
【问题描述】:
通常在我的.ts 文件中,我可以通过调用以下内容来访问窗口对象:
(<any>window).myObject
我在我的.tsx 文件中遇到了编译错误。有什么方法可以从.tsx 文件中访问它吗?
谢谢。
【问题讨论】:
标签: javascript typescript window-object
通常在我的.ts 文件中,我可以通过调用以下内容来访问窗口对象:
(<any>window).myObject
我在我的.tsx 文件中遇到了编译错误。有什么方法可以从.tsx 文件中访问它吗?
谢谢。
【问题讨论】:
标签: javascript typescript window-object
您可以使用as 语法进行类型断言。这是类型断言的替代语法,因为 <type>obj 与 JSX 语法冲突:
(window as any).myObject
上面的方法可以,但是如果你想要强类型,可以考虑augmentingWindow 接口来添加你的属性,这样你就可以在编译时进行类型检查:
declare global {
interface Window {
myObject: YourObjectType;
}
}
【讨论】:
语法 <type> 已被 ts 团队弃用。这是因为它与新的jsx 语法之间存在太多歧义。相反,ts 团队为类型断言引入了as 运算符。
所以这个语法:
(window as any).things
是最新的更新。
这个更改已经完成,因为基本上,很难告诉编译器什么时候这种语法与类型或 jsx 元素相关。同样,符号变得更难阅读(例如,见下文):
<Component>
{<String>something}
</Component>
更多细节可以在这里https://basarat.gitbooks.io/typescript/docs/types/type-assertion.html#as-foo-vs-foo和https://github.com/Microsoft/TypeScript/issues/296找到
【讨论】: