7

通常在我的.ts文件中,我可以通过调用以下内容来访问窗口对象:

(<any>window).myObject

我在我的.tsx文件中收到了编译错误。有什么办法可以从.tsx文件中访问它吗?

谢谢。

4

2 回答 2

18

您可以使用as类型断言的语法。<type>obj这是与 JSX 语法冲突的类型断言的替代语法:

(window as any).myObject

以上将起作用,但是如果您想要强类型,请考虑增加接口Window以添加您的属性,以便您获得编译时类型检查:

declare global {
    interface Window {
        myObject: YourObjectType;
    }
}
于 2017-12-28T14:04:17.117 回答
4

<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/问题/296

于 2017-12-28T14:12:37.230 回答