Никакая перегрузка не соответствует этому вызову с Vue 3 ref

#typescript #vue.js #vuejs3

#машинописный текст #vue.js #vuejs3

Вопрос:

У меня определены следующие типы, и я пытаюсь использовать с ref и не хочу изначально определять все значения реквизитов по умолчанию, но я ошибаюсь: Перегрузка не соответствует этому вызову

 interface EmailReminder {  bcc_emails: string[] | null;  cc_emails: string[];  from_email: string;  message: string;  offset_days: number;  subject: string;  to_emails: string[];  sent_at: string | Date;  uuid: string; }  

И когда я пытаюсь создать реактивную переменную с помощью Vue 3 ref , передавая свой тип вместо общего, машинопись сердится и выдает следующую ошибку.

 const reminder = reflt;EmailRemindergt;({  to_emails: [],  cc_emails: [],  message: '',  subject: '',  });  

введите описание изображения здесь

Не мог бы кто-нибудь, пожалуйста, сказать мне, что я здесь делаю не так, я не хочу делать некоторые свойства необязательными, и я не хочу использовать as их для их удаления.

Комментарии:

1. Вам придется сделать их необязательными, иначе они будут другого типа.

Ответ №1:

Они не одного типа, вы нарушаете цель машинописи здесь. Возможно, просто придерживайтесь javascript, если вы не хотите, чтобы объекты были строго определены по типу. Ваша попытка назначить 2 разных типа-это то, что подхватывает компилятор.

Отсутствующие должны быть необязательными, иначе вы получите эту ошибку, несмотря ни на что.

 interface EmailReminder {  cc_emails: string[];  message: string;  to_emails: string[];  subject: string;  bcc_emails?: string[] | null;  from_email?: string;  offset_days?: number;  sent_at?: string | Date;  uuid?: string; }  

в качестве альтернативы вы можете инициализировать другие значения как неопределенные

 const reminder = reflt;EmailRemindergt;({  to_emails: [],  cc_emails: [],  message: '',  subject: '',  bcc_emails: undefined  from_email: undefined;  offset_days: undefined;  sent_at: undefined;  uuid: undefined;  });  

Если вы действительно действительно не хотите делать вышесказанное, я думаю, вы могли бы технически создать 2 типа и разрешить им быть либо

 interface BaseEmailReminder {  cc_emails: string[];  message: string;  to_emails: string[];  subject: string; }  interface ExtendedEmailReminder extends BaseEmailReminder {  bcc_emails: string[] | null;  from_email: string;  offset_days: number;  sent_at: string | Date;  uuid: string; }  

а потом иди

 const reminder = reflt;BaseEmailReminder | ExtendedEmailRemindergt;({  to_emails: [],  cc_emails: [],  message: '',  subject: '',  });  

Я рекомендую использовать необязательные члены, хотя бы потому, что вторые 2 примера являются своего рода анти-шаблонными взломами, которые на самом деле не соответствуют поведению машинописи должным образом и не являются лучшими практиками, поскольку, не имея этих членов, вы говорите, что они необязательны.