gpt4 book ai didi

typescript - Vue + TypeScript + CSS 模块

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:25 25 4
gpt4 key购买 nike

我有 SFC(单文件 vue 组件),它使用 TypeScript、渲染函数和 CSS 模块

<script lang="ts">
import Vue from 'vue';

export default Vue.extend({
props: {
mode: {
type: String,
default: 'td', // or th
},
},
render(h) {
return h('tr', [
'preview',
'name',
'price',
'count',
'delete',
].map(col => h(this.mode, { class: this.$style[col] },
this.$slots[col])));
},
});
</script>

<style lang="stylus" module>
.preview
display none

.delete
text-align center

@media (min-width 768px)
.preview
display table-row
</style>

我从 TypeScript 收到错误:

ERROR in /home/oks/apps/shop/src/components/CartRow.vue
18:45 Property '$style' does not exist on type 'CombinedVueInstance<Vue, {}, {}, {}, Readonly<{ mode: string; }>>
'.
16 | 'count',
17 | 'delete',
> 18 | ].map(col => h(this.mode, { class: this.$style[col] }, this.$slots[col])));
| ^
19 | },
20 | });

在 JS 中这段代码有效,但 TS 不知道 CSS 模块和 this.$style 属性。如何解决?

最佳答案

您需要增加 Vue 类型。创建声明文件(如 sfc.d.ts)并添加以下内容:

// 1. Make sure to import 'vue' before declaring augmented types
import Vue from 'vue'

// 2. Specify a file with the types you want to augment
// Vue has the constructor type in types/vue.d.ts
declare module 'vue/types/vue' {
// 3. Declare augmentation for Vue
interface Vue {
$style: any
}
}

更改any以匹配$style的类型声明,例如:

$style: { [key: string]: string }

关于typescript - Vue + TypeScript + CSS 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com