使用装饰器时如何在 VueJS 中使用 Data 对象? “预计 'this' 将由类方法 'data' 使用。”

Posted

技术标签:

【中文标题】使用装饰器时如何在 VueJS 中使用 Data 对象? “预计 \'this\' 将由类方法 \'data\' 使用。”【英文标题】:How to use the Data object in VueJS when using Decorators? "Expected 'this' to be used by class method 'data'."使用装饰器时如何在 VueJS 中使用 Data 对象? “预计 'this' 将由类方法 'data' 使用。” 【发布时间】:2019-08-19 18:16:08 【问题描述】:

错误 > 类方法 'data' 应该使用 'this'。

我确实找到了这个,并认为我在下面是正确的: TypeScript Unexpected token, A constructor, method, accessor or property was expected

<script lang="ts">
import  Component, Prop, Vue  from 'vue-property-decorator'
import  MOON_HOLDINGS_LINK, TWITTER_LINK  from '@/constants/links'

@Component
export default class HelloWorld extends Vue 
  @Prop() private title!: string

  data(): any 
    return 
      moonLink: MOON_HOLDINGS_LINK,
    
  

</script>

【问题讨论】:

这只是来自 linter。您可以在基本配置中覆盖它。如果你还没有,你也可以使用eslint-plugin-vue 来帮助使用指令和样式指南:) 谢谢@JohnRuddell!是的,静态也解决了这个问题,但我在 data() 方法中不需要这些变量。 哦,嘿,莱昂!没想到是你 :D @JohnRuddell sup man hehe,这几天 Whoat 怎么样?顺便说一句,在 React/Typescript lmk 中构建这个你的想法:moon.holdings 哈哈我很久以前就从那个地方搬过来了!我们应该找个时间赶上 :) 我今晚去看看 【参考方案1】:

这是由于 ESLint 的 class-methods-use-this 规则。

data() 不需要使用this(仅在极少数情况下)。

因此您可能应该取消针对该特定方法的警告,因为我相信data() 符合ESLint as a possible exception to that rule 描述的场景:

例如,您可能有来自外部库的规范,该规范要求您将方法覆盖为常规函数(而不是静态方法),并且不在函数体内使用 this

所以你会使用:

/*eslint class-methods-use-this: ["error",  "exceptMethods": ["data"] ] */

例子:

<script lang="ts">
import  Component, Prop, Vue  from 'vue-property-decorator'
import  MOON_HOLDINGS_LINK, TWITTER_LINK  from '@/constants/links'

@Component
export default class HelloWorld extends Vue 
  @Prop() private title!: string

  /*eslint class-methods-use-this: ["error",  "exceptMethods": ["data"] ] */
  data(): any 
    return 
      moonLink: MOON_HOLDINGS_LINK,
    
  

</script>

【讨论】:

为每个 Vue 类写出忽略注释会很烦人。在.eslintrc 或其他东西中覆盖可能会更好

以上是关于使用装饰器时如何在 VueJS 中使用 Data 对象? “预计 'this' 将由类方法 'data' 使用。”的主要内容,如果未能解决你的问题,请参考以下文章

使用Typescript和类组件装饰器时如何在Vue Router中传递props

使用Typescript和类组件装饰器时如何将数组传递给Vue中的props

Typescript:使用装饰器时的类型推断

Python 中实现装饰器时使用 @functools.wraps 的理由

使用类作为装饰器时,为啥 'self' 不在 args 中? [复制]

装饰器仅在装饰方法时有效,但在使用作为参数传递的方法调用装饰器时无效