Vue.extend() 使用時に data の中身を推論するには computed, methods あるいは props 定義が必要っぽい (2018 年 11 月時点)
Vue.extend() 使用時に data の中身を推論するには computed, methods あるいは props 定義が必要っぽい (2018 年 11 月時点):
Type Vue without TypeScript の JSDoc による戻り値などの型指定をやっていたところ
Vue Forum の投稿の
Vue2.5 でthisが推論されない の
踏み込んで調べてはいないですが
コメントに記載したような
結果
かなり長い表示がされるので前述の
どうも
Vue.extend() 使用時の data 推論には computed などの定義が必要っぽい
Type Vue without TypeScript の JSDoc による戻り値などの型指定をやっていたところ $data についてつまづいたのでVisual Studio Code により Vue CLI 3 や Nuxt.js 2 などで試しました。
Vue.extend() による $data の推論に必要と思われる options は・・・
computed と methods
Vue Forum の投稿のVue2.5 でthisが推論されない の
computed のあたりを参考にしました。data-inferred-by-computed-and-methods
<script>
import Vue from 'vue';
export default Vue.extend({
data() {
return {
name: 'taro',
};
},
// computed は中身が通常の関数、アロー関数どちらでも問題なし
// ただし定義をしない、あるいは空にすると $data 配下が any 扱いに
computed: {
[Symbol()]() {
return 0;
},
// [Symbol()]: () => 0,
},
mounted() {
// (property) name: string
this.name;
},
// methods は空でも定義があればよく、
// 中身の定義をする場合でも通常の関数、アロー関数どちらでもよい
methods: {
test: () => 1,
exec() {},
},
});
</script>
props で default 定義にアロー関数が指定されているもの
data-inferred-by-props-arrow-function
<script>
import Vue from 'vue';
export default Vue.extend({
props: {
puroppu: {
type: Boolean,
default: () => false,
// アロー関数でないと $data 配下が any になるだけ
// default() {
// return false;
// },
},
},
data() {
return {
name: 'saburo',
};
},
mounted() {
// (property) ComponentOptions<Vue, DefaultData<Vue>, DefaultMethods<Vue>, DefaultComputed, PropsDefinition<Record<string, any>>, Record<string, any>>.name: string
this.name;
},
});
</script>
props 配下にて default をアロー関数で指定したものが存在しているとコメントに記載したような
(property) ComponentOptions<Vue, DefaultData<Vue>, DefaultMethods<Vue>, DefaultComputed, PropsDefinition<Record<string, any>>, Record<string, any>>.name: string という推論?が行われ結果
string が取得できるようです。かなり長い表示がされるので前述の
computed methods のほうを使いたいと感じましたがどうも
props 配下に 1 つでも default にアロー関数を使用しているとこちらの方式が優先されるもようです。
コメント
コメントを投稿