VisualStudioのTypeScriptでVue.js2.0タイピングを機能させようとしています。以前、DefinitelyTypedの これらのタイピング を使用していましたが、Vue.js 1.0用であるため、一致しません。ただし、それらは問題なく機能し、Vue
タイプで機能させてくれました。
それ以来、Vue.jsリリースに付属するタイピングファイルの使用に移行しました( ここ )。 ~/Scripts/typings/vue
フォルダーのプロジェクトにそれらを含めましたが、私のプロジェクトはそれらを理解していません。
これらのタイピングファイルは、インポート/エクスポートを介して使用するためのものであることを収集しましたか?この方法で使用している他のタイピングファイルはありません。そのため、自分のプロジェクトでグローバルに使用できるようにタイピングを正しく実装する方法がわかりません。
私が試したことの例を示すサンプルソリューションがあります--- 私のgithubリポジトリからここからダウンロードしてください 。
Scripts
フォルダの構造は次のとおりです。
_ references.d.tsコンテンツ
/// <reference path="typings/vue/index.d.ts" />
vue_test.tsコンテンツ
namespace Test
{
export class MyClass
{
public initialize()
{
var component = this.getComponent();
}
private getComponent(): Vue.Component
{
return Vue.component("test", {
template: "<div></div>",
props: ["test"],
methods: {
onClick: () =>
{
}
}
});
}
}
}
私が期待するのは、Vue.Component
名前空間およびtypings/vue/index.d.ts
で宣言されている他の名前空間にアクセスできることですが、そうではないようです。
次のように、エクスポートしたクラスをglobal
にインポートしようとしました。
import * as _Vue from "./index";
declare global
{
export class Vue extends _Vue
{
}
}
ただし、これではルートVue
クラスにしかアクセスできないため、タイプとしてVue.Component
を指定したり、Vue
以外の名前空間を指定したりすることはできません。
その他の情報:
Visual Studio 2015
Vue.jsバージョン2.2.1
TypeScriptバージョン2.1
@ unionalからの提案後のUPDATEこれが私の新しいフォルダ構造です:
代わりにtsconfig.jsonを使用して、_references.d.tsを削除します。 tsconfig.jsonファイルには次のものが含まれています。
{
"compilerOptions": {
"sourceMap": true
},
"include": [
"../../**/*.ts"
]
}
上記はプロジェクトのすべての.tsファイルをインポートします。 ~/Scripts/typings/custom-typings/vue.d.ts
ファイルには次のものが含まれています。
export * from "vue"
export as namespace Vue
VisualStudioはCannot find module 'vue'
を教えてくれるので、tsconfig.jsonファイルは機能しますが、タイピングはまだ機能しません(jQueryタイピングを追加して確認しました)。
新しい問題を示す更新されたソリューションへのリンクは次のとおりです。 [link]
@unionalのコメントからの情報を使用することができましたが、わずかな変更がありました。
これをcustom-vue.d.tsファイルに追加しました。
_import * as _Vue from 'vue';
export as namespace Vue;
export = _Vue;
_
さらに、次のように_package.json
_ファイルを作成する必要がありました。
_{
"dependencies": {
"vue": "^2.2.1"
}
}
_
最後に、_node_modules
_ファイルと同じスコープに_tsconfig.json
_フォルダーを追加する必要がありました。次のものがあります。
_+-- node_modules
| +-- vue
| | +-- package.json
| | +-- types
| | | +-- index.d.ts
| | | +-- options.d.ts
| | | +-- plugin.d.ts
| | | +-- vnode.d.ts
| | | +-- vue.d.ts
_
_package.json
_ simpleに含まれるもの:
_{
"typings": "types/index.d.ts"
}
_
そして物事は今働いています
編集
あるいは、_node_modules
_のmoduleResolution
のプロパティをClassic
に設定することで、_tsconfig.json
_全体を回避できることを発見しました。その後、_custom-vue.d.ts
_インポートを次のように変更しました。
_import * as _Vue from "../vue/index";
_
アプリのルートディレクトリのコマンドラインにドロップダウンして、NPMとTypeScriptコマンドラインインターフェイスを使用します。
npm init
を実行します。npm install --save vue
を実行します。npm install --save-dev @types/vue
を実行します。tsc --init
を実行します。tsc
を実行してビルドできるようになります。NPMを使用しないことは型破りであり、多くの手作業が必要になります。これがそれらの手動アプローチの1つです。
VueJS 2.1.1をダウンロード GitHubリポジトリから 。アーカイブを抽出した後、
dist
の内容をScripts/vuejs
ディレクトリに置きます。typings
の内容をtypings/vuejs
ディレクトリに置きます。tsconfig.json
{
"compilerOptions": {
// ....... other properties omitted
"typeRoots": [
"./typings/"
],
"target": "es5",
"lib": ["es2015", "dom", "es2015.promise" ]
}
}
次に、Vueを使用するファイルの先頭に、相対インポートステートメントを追加します。
import * as Vue from "../typings/vuejs";
interface MyComponent extends Vue {
message: string
onClick (): void
}
export default {
template: '<button @click="onClick">Click!</button>',
data: function () {
return {
message: 'Hello!'
}
},
methods: {
onClick: function () {
window.alert(this.message)
}
}
}
これは、WebApplication1の例の更新バージョンです。
https://github.com/bigfont/StackOverflow/tree/master/TypeScriptVueJsTypes
エラーはコンパイル時なので、大きな問題はありません。このプラグインを使用して、ここからの開発を高速化できます
また、コードは次のようになります
import Vue from 'vue'
import Component from 'vue-class-component'
// The @Component decorator indicates the class is a Vue component
@Component({
template: ''
})
export default class MyComponent extends Vue {
}
等々。 cshtmlファイル内でvuejsを引き続き使用できます。