老师你好:有3-12泛型问题,问题如图; 相关代码如图下。
来源:3-14 模块化结合typescript - 泛型改造

幕布斯9304279
2020-12-09
问题描述1: 泛型问题如下图
watch(loadimage.result, () => {
console.log(‘value’, loadimage.result.value)
})
以上代码通过;
但是无法使用 loading.result.value[0].url 有报错如下截图
问题2 : loadimage2.result.value?.message多了一个问号? 如何理解?如下图
相关代码和截图:
1: app.vue
{{count}}
{{double}}
{{greetings}}
mouse X: {{x}} mouse Y: {{y}}
loading image...
//useLoadImag.ts 代码
import { ref } from 'vue’
import axios from ‘axios’
function useLoadImag(url: string) {
const loading = ref(true)
const loaded = ref(false)
const result = ref<T | null>(null)
const err = ref(null)
axios.get(url).then((rawDate) => {
loading.value = false
loaded.value = true
result.value = rawDate.data
}).catch((e) => {
err.value = e
loading.value = false
})
return { loading, loaded, result, err };
}
export default useLoadImag
2回答
-
同学你好 这是ts 在帮助你查找到错误 因为我们的 result 可能是 T 或者 null 类型,一开始是 null
const result = ref<T | null>(null)
所以在使用的是它也可能是 null,所以我们要先判断他是否为 null,假如不为 null,那就是 T 类型,这称之为 type guard。
if (loading.result.value) { // 这时候再就不会报错了 loading.result.value[0].url }
第二个问题 和第一个问题是一个意思,是 ts 的一个简写符号。叫做 optional chaining,其实就是一种简写方式 等于
let x = foo?.bar.baz(); let x = (foo === null || foo === undefined) ? undefined : foo.bar.baz();
文档在这里:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional-chaining
012020-12-10 -
幕布斯9304279
提问者
2020-12-09
追加代码部分截图
00
相似问题