2017-02-05 25 views
11

Visual Studio Kodu, Vue 2 (webpack şablonu) ve Typescript kullanıyorum.VS Kodu kullanarak .vue dosyalarındaki Typescript ile nasıl çalışır?

Bu benim App.vue bileşenidir:

<template> 
    <div id="app"> 
     <navbar></navbar> 
     [content here] 
    </div> 
</template> 

<script lang="ts"> 
    import Navbar from './components/Navbar' 

    export default { 
     components: { 
      Navbar 
     } 
    } 
</script> 

Soru 1: Her şey iyi çalışıyor, ancak ts dosyalarında olduğu gibi ben <script lang="ts"> etiketi içinde intellisense istiyorum, peki nasıl elde edebilirsiniz o?

Soru 2: Ana sayfamda import App from './App' var, ancak VS Kodu, .ts dosyasını bulamadığı için "./App" kırmızı olarak altı çizili. Düzenleyicinin, derleme zamanından önce (düzenleme zamanında) .vue değerini tanıması için bir yol var mı?

+0

Q2'ye gelince, uzantı ile içe aktarma kullanıyorum: "' import/varsayılan olarak "./Question.vue '' yerine – TSV

+0

@TSV, ancak" Soru "türünde" Soru "olmaz. herhangi bir "? – Oswaldo

+0

Evet, hala bir intellisense sahip değilim, ancak bunu uydurdum :-) – TSV

cevap

6

iç şablonla ts gibi App.vue bunu ayrı bir script.ts dosyaya typescript kodu koyup şunlardır: @Oswaldo önerdiği gibi, Q2 için

<script lang="ts"> 
    import s from './script' 
    export default s 
</script> 

, bir 01 tanımlı olabilir Eğer ${Project_ROOT}/typings klasöründe bu dosyayı koyarsanız

declare module '*.vue' { 
    import Vue = require('vue') 
    const value: Vue.ComponentOptions<Vue> 
    export default value 
} 

, sen Sonra birlikte *.vue dosyası alabilir

"typeRoots": ["./typings"] 

gibi senin tsconfig.json bu tip dosya eklemek gerekir: Aşağıdaki içeriğe sahipdosya .vue postfix:

import App from './App.vue' 

Eğerdahil etmek beğenmezsenizpostfix, bu tür src/components gibi tek bir klasördeki tüm Vue bileşenlerini koymak ve şöyle vue.d.ts değiştirebilirsiniz:

declare module 'src/components/*' { 
    import Vue = require('vue') 
    const value: Vue.ComponentOptions<Vue> 
    export default value 
} 

src mutlak yolu için bir takma ad olarak webpack.base.conf.js tanımlanır.

resolve: { 
    extensions: ['.js', '.vue', '.json', '.ts'], 
    alias: { 
    'vue$': 'vue/dist/vue.esm.js', 
    'src': resolve('src') 
    } 
} 

Sonra .vue postfix olmadan bir bileşeni ithal etmek tam yolunu kullanmak gerekir:

import App from 'src/components/App' 

Hem zarif çözümler değil ama kırmızı altı çizili gitmiş.

+0

thx, sadece Q1'i vetur'u önermek için değiştirin (benim soru tek bir dosya bileşeni ile ilgili olarak) ve kabul edeceğim – Oswaldo

+0

cevabı olarak '.d.ts' dosyasının dahil edilmesinin' .vue' dosyalarında intellisense'i devre dışı bıraktığını keşfettim! Görünüşe göre VS Kodu '* .vue' uzantısını bir modül olarak tanımladığında, Vetur' .vue' dosyalarını artık yorumlamayacaktır. – Kokodoko

1

Q2 için, vue sınıfı bileşen bir çözümle gelir, sfc.d.ts, umarım size yardımcı olabilir. Q1 için herhangi bir fikir varsa, bana Q1 için

1

haber veriniz ben güzel VS Kod uzatma Q2 için

O .vue dosyaları ile elde edilemez Intellisense desteği ile vetur denilen bulunan tek kullanmak gerekir Q1 için bu

+0

Vetur'un (veya başka bir VS Kodu .vue eklentisinin) tip denetleyicisi hatalarını desteklemediğine dikkat edilmelidir. – hayavuk

+1

Vetur intellisense, 0,6 sürümünde eklenecektir: https://github.com/octref/vetur/pull/94 – Lucas