参数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回答
-
同学你好
你的错误原因是你没有安装 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,
就好啦。
012022-12-04 -
张轩
2022-12-03
同学你好
看代码没有问题
我感觉是你的 axios 没有安装好,你可以尝试重新安装一下试试。如果不行的话,可以把这个代码库(git)发给我,我在本地帮你调试一下,谢谢~
012022-12-03
相似问题