相关文章推荐
威武的海龟  ·  [C#]-DataGridView 小技巧 ...·  2 年前    · 
帅气的毛衣  ·  Uninstall error ...·  2 年前    · 
很拉风的红酒  ·  C/C++ Linux TCP ...·  2 年前    · 

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85 . 83 %
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

受付中

Vue3 (TypeScript) の型エラーがテンプレート内で発生します。

Privater

総合スコア 0

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

1 回答

0 グッド

0 クリップ

2553 閲覧

投稿 2021/11/15 10:01

前提・実現したいこと

Vue3 の型定義で VS Code によるエラーが出ます。
エラーが出ないようにするにはどうすれば良いでしょうか?

config/app.tsから読み込んだオブジェクトを、composable/useAppState.tsの関数で返し、views/Home.vue テンプレートで表示する処理です。
views/Home.vueの {{ appState.name }} で以下のエラーが表示されました。

発生している問題・エラーメッセージ

オブジェクト型は 'unknown' です。 ts(2571)

該当のソースコード

types/App.ts

TypeScript

1export interface App { 2 name: string

config/app.ts

TypeScript

1import { App } from '@/types/App' 3export const app:Readonly<App> = Object.freeze({ 4 name: 'アプリケーション名' 5})

composable/useAppState.ts

TypeScript

1import { computed } from 'vue' 2import { app } from '@/config/app' 4export const useAppState = (): Record<string, unknown> => { 5 const appState = computed(() => { 6 return app 7 }) 9 return { appState }

views/Home.vue

Vue

1<template> 2 <div>{{ appState.name }}</div> 3</template> 5<script lang="ts> 6import { defineComponent } from 'vue' 7import { useAppState } from '@/composable/useAppState' 9export default defineComponent({ 10 setup () { 11 const { appState } = useAppState() 13 return { 14 appState 17}) 18</script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

私はTypeScriptには明るくないのですが、推測で回答させていただきます。
appStateのプロパティはunknown型となっているので、本来は型のキャストをしなければ参照時にコンパイルエラーとなります。
事実console.log(appState.name)などと書いたら即エラーになりました。
ですが実際はvue自体のコードはTSのコンパイルの対象外であるため、その配下でパースされるテンプレート上では型判定エラーが起きずに普通に動作しているものと思われます。

このままではエディタ上の表示だけでなく、TSコードの他の部分でもコンパイルに支障がで可能性があります。
そこで回避策として以下のuseAppStateの定義部分に関して、

export const useAppState = (): Record<string, unknown> => {
  • unknownanyにする
  • 型を明確にRecord<string, Record<string, any>>(あるいは{ appState: Record<string, any> }等)にする
  • 厳密に自作のAppState型にする
  • 以上のいずれかを行えば問題は解消すると思います。

    投稿2021/11/16 03:13

    編集2021/11/16 03:13
    surface_0

    総合スコア495

    下記のような回答は推奨されていません。

    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    このような回答には修正を依頼しましょう。

    あなたの回答

    tips