From a2eb8d3537bafd9028a17349facaf160b4eb8fb7 Mon Sep 17 00:00:00 2001 From: Rewrite0 Date: Mon, 23 Sep 2024 16:04:31 +0800 Subject: [PATCH] fix: type error --- .../src/components/setting/config-parser.vue | 1 - webui/types/config.ts | 173 +++++++++--------- webui/types/utils.ts | 40 +--- 3 files changed, 87 insertions(+), 127 deletions(-) diff --git a/webui/src/components/setting/config-parser.vue b/webui/src/components/setting/config-parser.vue index 42d88ed4..d0b9c418 100644 --- a/webui/src/components/setting/config-parser.vue +++ b/webui/src/components/setting/config-parser.vue @@ -7,7 +7,6 @@ const { getSettingGroup } = useConfigStore(); const parser = getSettingGroup('rss_parser'); -/** @ts-expect-error Incorrect order */ const langs: RssParserLang = ['zh', 'en', 'jp']; const items: SettingItem[] = [ diff --git a/webui/types/config.ts b/webui/types/config.ts index a53b1189..cafaa181 100644 --- a/webui/types/config.ts +++ b/webui/types/config.ts @@ -1,62 +1,91 @@ -import type { UnionToTuple } from '#/utils'; +import type { TupleToUnion } from './utils'; + +/** 下载方式 */ +export type DownloaderType = ['qbittorrent']; +/** rss parser 源 */ +export type RssParserType = ['mikan']; +/** rss parser 方法 */ +export type RssParserMethodType = ['tmdb', 'mikan', 'parser']; +/** rss parser 语言 */ +export type RssParserLang = ['zh', 'en', 'jp']; +/** 重命名方式 */ +export type RenameMethod = ['normal', 'pn', 'advance', 'none']; +/** 代理类型 */ +export type ProxyType = ['http', 'https', 'socks5']; +/** 通知类型 */ +export type NotificationType = ['telegram', 'server-chan', 'bark', 'wecom']; +/** OpenAI Model List */ +export type OpenAIModel = ['gpt-3.5-turbo']; +/** OpenAI API Type */ +export type OpenAIType = ['openai', 'azure']; + +export interface Program { + rss_time: number; + rename_time: number; + webui_port: number; +} + +export interface Downloader { + type: TupleToUnion; + host: string; + username: string; + password: string; + path: string; + ssl: boolean; +} +export interface RssParser { + enable: boolean; + type: TupleToUnion; + token: string; + custom_url: string; + filter: Array; + language: TupleToUnion; + parser_type: TupleToUnion; +} +export interface BangumiManage { + enable: boolean; + eps_complete: boolean; + rename_method: TupleToUnion; + group_tag: boolean; + remove_bad_torrent: boolean; +} +export interface Log { + debug_enable: boolean; +} +export interface Proxy { + enable: boolean; + type: TupleToUnion; + host: string; + port: number; + username: string; + password: string; +} +export interface Notification { + enable: boolean; + type: 'telegram' | 'server-chan' | 'bark' | 'wecom'; + token: string; + chat_id: string; +} +export interface ExperimentalOpenAI { + enable: boolean; + api_key: string; + api_base: string; + model: TupleToUnion; + // azure + api_type: TupleToUnion; + api_version?: string; + deployment_id?: string; +} export interface Config { - program: { - rss_time: number; - rename_time: number; - webui_port: number; - }; - downloader: { - type: 'qbittorrent'; - host: string; - username: string; - password: string; - path: string; - ssl: boolean; - }; - rss_parser: { - enable: boolean; - type: 'mikan'; - token: string; - custom_url: string; - filter: Array; - language: 'zh' | 'en' | 'jp'; - parser_type: 'tmdb' | 'mikan' | 'parser'; - }; - bangumi_manage: { - enable: boolean; - eps_complete: boolean; - rename_method: 'normal' | 'pn' | 'advance' | 'none'; - group_tag: boolean; - remove_bad_torrent: boolean; - }; - log: { - debug_enable: boolean; - }; - proxy: { - enable: boolean; - type: 'http' | 'https' | 'socks5'; - host: string; - port: number; - username: string; - password: string; - }; - notification: { - enable: boolean; - type: 'telegram' | 'server-chan' | 'bark' | 'wecom'; - token: string; - chat_id: string; - }; - experimental_openai: { - enable: boolean; - api_key: string; - api_base: string; - model: 'gpt-3.5-turbo'; - // azure - api_type: 'openai' | 'azure'; - api_version?: string; - deployment_id?: string; - }; + program: Program; + downloader: Downloader; + rss_parser: RssParser; + bangumi_manage: BangumiManage; + log: Log; + proxy: Proxy; + notification: Notification; + experimental_openai: ExperimentalOpenAI; } export const initConfig: Config = { @@ -117,33 +146,3 @@ export const initConfig: Config = { deployment_id: '', }, }; - -type getItem = Pick[T]; - -export type Program = getItem<'program'>; -export type Downloader = getItem<'downloader'>; -export type RssParser = getItem<'rss_parser'>; -export type BangumiManage = getItem<'bangumi_manage'>; -export type Log = getItem<'log'>; -export type Proxy = getItem<'proxy'>; -export type Notification = getItem<'notification'>; -export type ExperimentalOpenAI = getItem<'experimental_openai'>; - -/** 下载方式 */ -export type DownloaderType = UnionToTuple; -/** rss parser 源 */ -export type RssParserType = UnionToTuple; -/** rss parser 方法 */ -export type RssParserMethodType = UnionToTuple; -/** rss parser 语言 */ -export type RssParserLang = UnionToTuple; -/** 重命名方式 */ -export type RenameMethod = UnionToTuple; -/** 代理类型 */ -export type ProxyType = UnionToTuple; -/** 通知类型 */ -export type NotificationType = UnionToTuple; -/** OpenAI Model List */ -export type OpenAIModel = UnionToTuple; -/** OpenAI API Type */ -export type OpenAIType = UnionToTuple; diff --git a/webui/types/utils.ts b/webui/types/utils.ts index c9c2ab8a..6b8016ea 100644 --- a/webui/types/utils.ts +++ b/webui/types/utils.ts @@ -1,39 +1 @@ -/** - * 将联合类型转为对应的交叉函数类型 - * @template U 联合类型 - */ -export type UnionToInterFunction = ( - U extends any ? (k: () => U) => void : never -) extends (k: infer I) => void - ? I - : never; - -/** - * 获取联合类型中的最后一个类型 - * @template U 联合类型 - */ -export type GetUnionLast = UnionToInterFunction extends { (): infer A } - ? A - : never; - -/** - * 在元组类型中前置插入一个新的类型(元素); - * @template Tuple 元组类型 - * @template E 新的类型 - */ -export type Prepend = [E, ...Tuple]; - -/** - * 联合类型转元组类型; - * @template Union 联合类型 - * @template T 初始元组类型 - * @template Last 传入联合类型中的最后一个类型(元素),自动生成,内部使用 - */ -export type UnionToTuple< - Union, - T extends any[] = [], - Last = GetUnionLast -> = { - 0: T; - 1: UnionToTuple, Prepend>; -}[[Union] extends [never] ? 0 : 1]; +export type TupleToUnion = T[number];