#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 примера являются своего рода анти-шаблонными взломами, которые на самом деле не соответствуют поведению машинописи должным образом и не являются лучшими практиками, поскольку, не имея этих членов, вы говорите, что они необязательны.