通常在我的.ts
文件中,我可以通过调用以下内容来访问窗口对象:
(<any>window).myObject
我的.tsx
文件中出现了编译错误。有什么办法可以从.tsx
文件中访问它吗?
感谢。
答案 0 :(得分:8)
您可以使用as
语法进行类型断言。这是类型断言的替代语法,因为<type>obj
与JSX语法冲突:
(window as any).myObject
以上内容可行,但如果您想要强类型,请考虑augmenting Window
接口添加您的属性,以便进行编译时类型检查:
declare global {
interface Window {
myObject: YourObjectType;
}
}
答案 1 :(得分:3)
ts团队不推荐使用语法<type>
。这是因为它与新的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
找到更多详细信息