如何使用 VS Code 在 .vue 文件中使用 Typescript?
How to work with Typescript in .vue files using VS Code?
我正在使用 Visual Studio 代码、Vue 2(webpack 模板)和 Typescript。
这是我的 App.vue 组件:
<template>
<div id="app">
<navbar></navbar>
[content here]
</div>
</template>
<script lang="ts">
import Navbar from './components/Navbar'
export default {
components: {
Navbar
}
}
</script>
问题 1:一切正常,但我希望在 <script lang="ts">
标记内有智能感知,因为它发生在 .ts 文件中,那么我该如何实现呢?
问题 2:在我的 main.ts 中,我有 import App from './App'
,但是“./App”带有红色下划线,因为 VS Code 找不到 .ts 文件。有没有办法让编辑器在编译前(编辑时)识别.vue?
更新 (2018-03-25): 我强烈推荐所有想要设置打字稿的人阅读 this
Q2,vue-class-component自带解决方案,sfc.d.ts,希望对你有帮助。如果您对Q1有什么想法,请告诉我
对于第 1 季度,我发现了一个名为 vetur 的不错的 VS Code 扩展,具有智能感知支持
Q2无法用.vue文件实现,只需要使用.ts里面的模板
对于第 1 季度,将 Typescript 代码放入单独的 script.ts
文件并将其包含在 App.vue
中,例如:
<script lang="ts">
import s from './script'
export default s
</script>
对于第 2 季度,正如@Oswaldo 所建议的,您可以定义一个 vue.d.ts
文件,其中包含以下内容:
declare module '*.vue' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
如果您将此文件放在 ${Project_ROOT}/typings
文件夹中,则需要将此类型文件包含在您的 tsconfig.json
like
中
"typeRoots": ["./typings"]
然后您可以导入 *.vue
后缀为 .vue
的文件:
import App from './App.vue'
如果你不想包含 .vue
后缀,你可以将所有 Vue 组件放在一个文件夹中,例如 src/components
并更改 vue.d.ts
如下:
declare module 'src/components/*' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
src
被定义为 webpack.base.conf.js
作为绝对路径的别名。
resolve: {
extensions: ['.js', '.vue', '.json', '.ts'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'src': resolve('src')
}
}
然后你需要使用完整路径导入一个没有.vue
后缀的组件:
import App from 'src/components/App'
两者都不是优雅的解决方案,但红色下划线消失了。
我正在使用 Visual Studio 代码、Vue 2(webpack 模板)和 Typescript。
这是我的 App.vue 组件:
<template>
<div id="app">
<navbar></navbar>
[content here]
</div>
</template>
<script lang="ts">
import Navbar from './components/Navbar'
export default {
components: {
Navbar
}
}
</script>
问题 1:一切正常,但我希望在 <script lang="ts">
标记内有智能感知,因为它发生在 .ts 文件中,那么我该如何实现呢?
问题 2:在我的 main.ts 中,我有 import App from './App'
,但是“./App”带有红色下划线,因为 VS Code 找不到 .ts 文件。有没有办法让编辑器在编译前(编辑时)识别.vue?
更新 (2018-03-25): 我强烈推荐所有想要设置打字稿的人阅读 this
Q2,vue-class-component自带解决方案,sfc.d.ts,希望对你有帮助。如果您对Q1有什么想法,请告诉我
对于第 1 季度,我发现了一个名为 vetur 的不错的 VS Code 扩展,具有智能感知支持
Q2无法用.vue文件实现,只需要使用.ts里面的模板
对于第 1 季度,将 Typescript 代码放入单独的 script.ts
文件并将其包含在 App.vue
中,例如:
<script lang="ts">
import s from './script'
export default s
</script>
对于第 2 季度,正如@Oswaldo 所建议的,您可以定义一个 vue.d.ts
文件,其中包含以下内容:
declare module '*.vue' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
如果您将此文件放在 ${Project_ROOT}/typings
文件夹中,则需要将此类型文件包含在您的 tsconfig.json
like
"typeRoots": ["./typings"]
然后您可以导入 *.vue
后缀为 .vue
的文件:
import App from './App.vue'
如果你不想包含 .vue
后缀,你可以将所有 Vue 组件放在一个文件夹中,例如 src/components
并更改 vue.d.ts
如下:
declare module 'src/components/*' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
src
被定义为 webpack.base.conf.js
作为绝对路径的别名。
resolve: {
extensions: ['.js', '.vue', '.json', '.ts'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'src': resolve('src')
}
}
然后你需要使用完整路径导入一个没有.vue
后缀的组件:
import App from 'src/components/App'
两者都不是优雅的解决方案,但红色下划线消失了。