如何使用 VS Code 在 .vue 文件中使用 Typescript?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42058620/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to work with Typescript in .vue files using VS Code?
提问by Oswaldo
I'm using Visual Studio Code, Vue 2 (webpack template) and Typescript.
我正在使用 Visual Studio Code、Vue 2(webpack 模板)和 Typescript。
This is my App.vue component:
这是我的 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>
Question 1: Everything is working fine, but I would like to have intellisense inside <script lang="ts">
tag as it happens in .ts files, so how can I achieve that?
问题 1:一切正常,但我希望<script lang="ts">
在 .ts 文件中包含智能感知内部标签,那么我该如何实现呢?
Question 2: In my main.ts I have import App from './App'
, but "./App" is underlined in red since VS Code can't find the .ts file. Is there a way to make the editor recognizes .vue before compile time (in editing time)?
问题 2:在我的 main.ts 中有import App from './App'
,但“./App”用红色下划线标出,因为 VS Code 找不到 .ts 文件。有没有办法让编辑器在编译时(在编辑时)之前识别 .vue?
Update(2018-03-25): I highly recommend everyone who wants to setup typescript to read this
更新(2018-03-25):我强烈推荐所有想要设置打字稿的人阅读本文
采纳答案by Ying
For Q1, put the Typescript code into a separate script.ts
file and include it in App.vue
like:
对于 Q1,将 Typescript 代码放入一个单独的script.ts
文件中,并将其包含在App.vue
如下文件中:
<script lang="ts">
import s from './script'
export default s
</script>
For Q2, as suggested by @Oswaldo, you can defined a vue.d.ts
file that has the following content:
对于 Q2,正如@Oswaldo 所建议的,您可以定义一个vue.d.ts
包含以下内容的文件:
declare module '*.vue' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
If you put this file in the ${Project_ROOT}/typings
folder, you need to include this type file in your tsconfig.json
like
如果你把这个文件放在文件${Project_ROOT}/typings
夹中,你需要在你tsconfig.json
喜欢的地方包含这个类型的文件
"typeRoots": ["./typings"]
Then you can import *.vue
file with the .vue
postfix:
然后您可以*.vue
使用.vue
后缀导入文件:
import App from './App.vue'
If you don't like to include the .vue
postfix, you can put all Vue components in a single folder such as src/components
and change the vue.d.ts
as the following:
如果您不喜欢包含.vue
后缀,您可以将所有 Vue 组件放在一个文件夹中,例如src/components
并将其更改vue.d.ts
为以下内容:
declare module 'src/components/*' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
The src
is defined webpack.base.conf.js
as an alias for an absolute path.
在src
被定义webpack.base.conf.js
为绝对路径的别名。
resolve: {
extensions: ['.js', '.vue', '.json', '.ts'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'src': resolve('src')
}
}
Then you need to use the full path to import a component without the .vue
postfix:
然后你需要使用完整路径来导入一个没有.vue
后缀的组件:
import App from 'src/components/App'
Both are not elegant solutions but the red underline is gone.
两者都不是优雅的解决方案,但红色下划线消失了。