如何使用 TypeScript 在 Vue“数据”选项中使用 JQuery 元素?

Posted

技术标签:

【中文标题】如何使用 TypeScript 在 Vue“数据”选项中使用 JQuery 元素?【英文标题】:How to use a JQuery element in Vue 'data' option using TypeScript? 【发布时间】:2019-01-05 14:16:51 【问题描述】:

我希望在 vue 'data' 对象中保留一个 jQuery 元素的引用,但 TypeScript 向我抱怨类型不匹配。

我该如何解决这个问题?

[编辑] 认为我通过引用一个不存在的 jQuery 元素作为属性的默认值来欺骗 TS,从而在很大程度上解决了这个问题。之后我可以引用该道具,它认为它是一个 jQuery 元素...... - 虽然它仍然感觉有点“hacky”......

非常感谢任何帮助!

var x = Vue.extend(
data: function () 
    return 
      _componenentDidMount: false,
      _myJQueryElement: undefined,
    
,
mounted: function () 
    // remember we are now mounted
    this._componenentDidMount = true;                       // this is OK

    // on mounting I wish to set the '_myJQueryElement' 
    this._myJQueryElement = $('.z-vertical-scrollbar');     // this FAILS
,
methods: 
    B() 

        // I can do this...  (typescript cleverly infers the type to be 'boolean')
        var didMount = this._componenentDidMount;           // this is OK

        // Now I wish to do 'jquery' stuff with the element
        var top = this._myJQueryElement.offset().top;       // this FAILS

    

(下面是代码在屏幕上的样子)

[编辑 2] ('fixed' 版本 - 通过引用不存在的元素使 TypeScript 相信它是一个 jQuery 元素)...

[编辑 3] (另一个不同的'fixed'版本-使用TypeScript正确定义属性)..-即使我使用'any'作为退出子句,因为jQuery返回一个JQuery | undefined back 很难处理...

【问题讨论】:

我认为这可能对你有用:***.com/questions/43783307/… 谢谢,但是我已经在全球范围内导入了 jQuery,而且效果很好 - 我的问题纯粹是关于如何摆脱上图中的红色“波浪线” 我知道问题一定在于 TS 可以推断 _componentDidMount 属性的类型但不能设置 _myJQueryElement 属性,除非我给出某种默认值? - 我也尝试过并且将问题减半......(参见上面的编辑图片) 【参考方案1】:

正确的类型应该是:

_myJqueryElement: JQuery<htmlElement>

【讨论】:

感谢您的回答,但这也不起作用(我已经尝试过了)。正如我试图逃避的那样,TS 编译器从“数据”返回对象中推断出类型,所以我需要将我的 _myJQueryElement 属性指定为(如果有的话) - 基本上,我该如何摆脱红色'潦草的线条! 你能提供一些你的问题吗?我试图在这里重现:stackblitz.com/edit/typescript-zpgtbw 并且它有效 它需要 Vue - 你使用 Vue 吗?问题在于“数据”对象的设置方式。如果不是 TypeScript,这一切都不是问题 :( 我在 vue 模型中尝试了与您完全相同的代码,它也可以工作

以上是关于如何使用 TypeScript 在 Vue“数据”选项中使用 JQuery 元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue 中以 Typescript 语法定义使用 prop 作为其初始值的本地数据属性?

Vue js,使用 TypeScript 从 Vue 中的表单获取数据

带有Typescript和beforeEnter保护的Vue-router,如何使用经过验证的数据?

如何在Vue项目中使用Typescript

如何在 Vue (Typescript) 中使用 axios?

如何使用 VS Code 在 .vue 文件中使用 Typescript?