参数rawData隐式具有any类型

来源:3-14 模块化结合typescript - 泛型改造

山有扶猪

2022-12-02

老师你好,我的运行出来有问题,这里我是加了泛型改造的(没加的时候也是这样),要怎么办啊
图片描述
然后根据vsCode提供的修复方案,给rawData和e规定了类型,报错取消了
图片描述
但是终端又报错了
图片描述
下面是源码

import { ref } from 'vue'
import axios from 'axios'

function useURLLoader<T>(url: string) {
    const loading = ref(true)
    const loaded = ref(false)
    const result = ref<T | null>(null)
    const error = ref(null)

    // 发送异步请求获取数据
    axios.get(url).then((rawData) => {
        loading.value = false
        loaded.value = true
        result.value = rawData.data
    }).catch((e) => {
        error.value = e
    })
    return {
        result,
        loading,
        error,
        loaded
    }
}
export default useURLLoader
<template>
  <img alt="Vue logo" src="./assets/logo.png">
  <h1>X:{{ x }},Y:{{ y }}</h1>
  <h1 v-if="loading">loading......</h1>
  <img :src="result.message" v-if="(loaded && result)">
</template>

<script lang="ts">
import { defineComponent } from 'vue'
import useMousePosition from './hooks/useMousePosition'
import useURLLoader from './hooks/useURLLoader'
interface DogResult {
  message: string;
  status: string;
}
export default defineComponent({
  name: 'App',
  setup() {
    const { x, y } = useMousePosition()
    const { result, loading, loaded } = useURLLoader<DogResult>('https://dog.ceo/api/breeds/image/random')
    return {
      x,
      y,
      result,
      loading,
      loaded
    }
  }
})
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

写回答

2回答

张轩

2022-12-04

同学你好 

你的错误原因是你没有安装 axios 啊~

你看你的 package.json 中,只有 vue

  "dependencies": {
    "vue": "^3.2.13"
  },

安装一下:

npm install axios --save

然后我启动以后,还有一个问题就是,useURLLoader.ts

export default function useURLLoader<T>(url: string): T
// 这里应该把返回的 T 类型删除掉,因为这个 T 类型明显是不对的,你或者指示正确的名称,或者让 ts 直接帮你猜测返回类型
// 所以直接把返回类型 T 删除就好
export default function useURLLoader<T>(url: string)

最后关于 any,可以直接关闭针对 any 的错误提示(我在我的环境下并没有出现对应的 any 提示),有可能是 ts 版本和你不一致等等导致。

 在 tsconfig.json 中添加:

"noImplicitAny": false,

就好啦。

0
1
山有扶猪
非常感谢!
2022-12-04
共1条回复

张轩

2022-12-03

同学你好

看代码没有问题

我感觉是你的 axios 没有安装好,你可以尝试重新安装一下试试。如果不行的话,可以把这个代码库(git)发给我,我在本地帮你调试一下,谢谢~

0
1
山有扶猪
老师您好,我重新安装了一下axios问题还是没解决,这是我的代码库,辛苦您帮我看下,谢谢~ https://gitee.com/shanyoufuzhu/zheye.git
2022-12-03
共1条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程