请问vue3+ts中如何给一个有类型注解的对象赋值null?

interface TabItemType {
  author: {
    avatar_url: string;
    loginname: string;
  };
  author_id: string;
  content: string;
  create_at: string;
  good: boolean;
  id: string;
  last_reply_at: string;
  reply_count: number;
  tab: string;
  title: string;
  top: boolean;
  visit_count: number;
}

const tabItem:TabItemType|null = ref(null)

此时提示错误:类型“Ref<null, null>”缺少类型“TabItemType”的以下属性: author, author_id, content, create_at 及其他 8 项。ts-plugin(2740)

阅读 751
avatarAI BotBETA
在 Vue 3 和 TypeScript 中,如果你想要给一个带有类型注解的对象赋值为 `null`,并且使用了 Vue 的 `ref` 函数,你需要正确地指定 `ref` 的泛型类型以包括 `null`。你可以通过将类型修改为 `TabItemType | null` 来实现这一点。

你的代码中已经接近正确,但是使用 `ref` 的方式需要稍作调整。在 Vue 3 的 Composition API 中,`ref` 函数用来创建一个响应式的引用对象,这个对象可以持有一个值。如果你想要这个值可以是 `TabItemType` 类型的对象,也可以是 `null`,你应该这样声明:

import { ref } from 'vue';

interface TabItemType {
author: {

avatar_url: string;
loginname: string;

};
author_id: string;
content: string;
create_at: string;
good: boolean;
id: string;
last_reply_at: string;
reply_count: number;
tab: string;
title: string;
top: boolean;
visit_count: number;
}

const tabItem = ref<TabItemType | null>(null);


注意这里的 `ref<TabItemType | null>(null)`,它明确地告诉 TypeScript,`tabItem` 是一个可以持有 `TabItemType` 类型对象或 `null` 的响应式引用。这样就不会出现类型错误了。
1 个回答

因为 tabItem 被初始化为 null,与 TabItemType 接口不匹配,可以用一个符合 TabItemType 结构的对象来初始化 tabItem

import { ref } from 'vue';

interface TabItemType {
  author: {
    avatar_url: string;
    loginname: string;
  };
  author_id: string;
  content: string;
  create_at: string;
  good: boolean;
  id: string;
  last_reply_at: string;
  reply_count: number;
  tab: string;
  title: string;
  top: boolean;
  visit_count: number;
}

const defaultTabItem: TabItemType = {
  author: {
    avatar_url: '',
    loginname: ''
  },
  author_id: '',
  content: '',
  create_at: '',
  good: false,
  id: '',
  last_reply_at: '',
  reply_count: 0,
  tab: '',
  title: '',
  top: false,
  visit_count: 0
};

const tabItem = ref<TabItemType | null>(defaultTabItem);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏