Используя 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
напрямую, но что-то там очень недовольно. Меня также немного смущают неизвестные вещи, упомянутые в ошибке, поскольку я ожидаю, что все будет либо строками, либо массивами.
это необходимо для использования синтаксиса type: []
? Значение по умолчанию, безусловно, может быть простой строкой в других местах. Кроме того, изменение его на: default: () => []
дает ту же ошибку
с TS вы можете это сделать, я уверен, но с js idk
prop1: {type: [String, Array], default: (): string | string[] => ''}
работает?
@тао не совсем так. Это делает тип string | undefined[]
, а это не то, что я ищу.
Кажется, это работает:
props: {
prop1: {type: [Array, String] as PropType<string[] | string>, default: ""}
}
Похоже, вам нужно привести весь тип, иначе вы получите предупреждения. Также кажется, что Array
по умолчанию имеет тип uknown[]
значение по умолчанию должно быть обратным вызовом, возвращающим пустой массив