Проверка поддержки Vuejs с несколькими типами и типизированными массивами

Используя Vuejs 3 и Typescript, цель состоит в том, чтобы получить свойство типа string | string[]. Глядя на документы, похоже, что я должен иметь возможность установить реквизит, используя несколько типов, например:

props: {
    prop1: {type: [String, Array], default: ""}
}

Глядя на коммит Vetur и документы снова, похоже, что я должен иметь возможность установить тип свойства массива следующим образом:

props: {
    prop1: {type: Array as PropType<string[]>, default: []}
}

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

props: {
    prop1: {type: [String, Array as PropType<string[]>], default: ""}
}

No overload matches this call.
The last overload gave the following error.
    Type '{ type: (StringConstructor | (new (...args: any[]) => string[] & object) | (() => string[]) | PropConstructor<string[]>[])[]; default: string; }' is not assignable to type 'PropOptions<unknown, unknown> | (new (...args: any[]) => object) | (() => unknown) | PropConstructor<unknown>[] | null'.
    Types of property 'type' are incompatible.
        Type '(StringConstructor | (new (...args: any[]) => string[] & object) | (() => string[]) | PropConstructor<string[]>[])[]' is not assignable to type 'true | (new (...args: any[]) => object) | (() => unknown) | PropConstructor<unknown>[] | null | undefined'.
        Type '(StringConstructor | (new (...args: any[]) => string[] & object) | (() => string[]) | PropConstructor<string[]>[])[]' is not assignable to type 'PropConstructor<unknown>[]'.
            Type 'StringConstructor | (new (...args: any[]) => string[] & object) | (() => string[]) | PropConstructor<string[]>[]' is not assignable to type 'PropConstructor<unknown>'.
            Type 'PropConstructor<string[]>[]' is not assignable to type 'PropConstructor<unknown>'.
                Type 'PropConstructor<string[]>[]' is not assignable to type '() => unknown'.
                Type 'PropConstructor<string[]>[]' provides no match for the signature '(): unknown'.

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

значение по умолчанию должно быть обратным вызовом, возвращающим пустой массив

Christian Carrillo 23.12.2020 02:43

это необходимо для использования синтаксиса type: []? Значение по умолчанию, безусловно, может быть простой строкой в ​​других местах. Кроме того, изменение его на: default: () => [] дает ту же ошибку

dlkulp 23.12.2020 02:44

с TS вы можете это сделать, я уверен, но с js idk

Christian Carrillo 23.12.2020 02:49

prop1: {type: [String, Array], default: (): string | string[] => ''} работает?

tao 23.12.2020 02:54

@тао не совсем так. Это делает тип string | undefined[], а это не то, что я ищу.

dlkulp 23.12.2020 02:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
5
2 967
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, это работает:

props: {
    prop1: {type: [Array, String] as PropType<string[] | string>, default: ""}
}

Похоже, вам нужно привести весь тип, иначе вы получите предупреждения. Также кажется, что Array по умолчанию имеет тип uknown[]

Другие вопросы по теме