更新ts类型导入导出语法
parent
5e9b3a16fa
commit
77ea6d3748
|
@ -1,6 +1,8 @@
|
||||||
|
import type { I18n } from '@/lang/i18n'
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
|
||||||
declare namespace LX {
|
declare namespace LX {
|
||||||
type AddMusicLocationType = 'top' | 'bottom'
|
type AddMusicLocationType = 'top' | 'bottom'
|
||||||
|
|
||||||
interface AppSetting {
|
interface AppSetting {
|
||||||
|
@ -24,7 +26,7 @@ declare namespace LX {
|
||||||
/**
|
/**
|
||||||
* 语言id
|
* 语言id
|
||||||
*/
|
*/
|
||||||
'common.langId': string | null
|
'common.langId': I18n['locale'] | null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* api id
|
* api id
|
||||||
|
@ -462,5 +464,6 @@ declare namespace LX {
|
||||||
*/
|
*/
|
||||||
'odc.isAutoClearSearchList': boolean
|
'odc.isAutoClearSearchList': boolean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -75,9 +75,6 @@ export {
|
||||||
unref,
|
unref,
|
||||||
onMounted,
|
onMounted,
|
||||||
markRaw,
|
markRaw,
|
||||||
ComputedRef,
|
|
||||||
Ref,
|
|
||||||
ShallowRef,
|
|
||||||
defineProps,
|
defineProps,
|
||||||
defineEmits,
|
defineEmits,
|
||||||
defineComponent,
|
defineComponent,
|
||||||
|
@ -85,3 +82,9 @@ export {
|
||||||
defineExpose,
|
defineExpose,
|
||||||
withDefaults,
|
withDefaults,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type {
|
||||||
|
ComputedRef,
|
||||||
|
Ref,
|
||||||
|
ShallowRef,
|
||||||
|
}
|
||||||
|
|
|
@ -1,22 +1,24 @@
|
||||||
import { App, ref } from 'vue'
|
import { App, ref } from 'vue'
|
||||||
import { messages, Messages, Message } from './index'
|
import { messages } from './index'
|
||||||
|
import type { Messages, Message } from './index'
|
||||||
|
|
||||||
type TranslateValues = Record<string, string | number | boolean>
|
type TranslateValues = Record<string, string | number | boolean>
|
||||||
|
|
||||||
|
type Langs = keyof Messages
|
||||||
|
|
||||||
export declare interface I18n {
|
export declare interface I18n {
|
||||||
locale: keyof Messages
|
locale: Langs
|
||||||
fallbackLocale: keyof Messages
|
fallbackLocale: Langs
|
||||||
availableLocales: Array<keyof Messages>
|
availableLocales: Langs[]
|
||||||
messages: Messages
|
messages: Messages
|
||||||
message: Message
|
message: Message
|
||||||
setLanguage: (locale: string) => void
|
setLanguage: (locale: Langs) => void
|
||||||
fillMessage: (message: string, val: TranslateValues) => string
|
fillMessage: (message: string, val: TranslateValues) => string
|
||||||
getMessage: (key: keyof Message, val?: TranslateValues) => string
|
getMessage: (key: keyof Message, val?: TranslateValues) => string
|
||||||
t: (key: keyof Message, val?: TranslateValues) => string
|
t: (key: keyof Message, val?: TranslateValues) => string
|
||||||
}
|
}
|
||||||
|
|
||||||
const locale = ref('zh-cn')
|
const locale = ref<Langs>('zh-cn')
|
||||||
|
|
||||||
let i18n: I18n
|
let i18n: I18n
|
||||||
|
|
||||||
|
@ -47,7 +49,7 @@ const useI18n = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const setLanguage = (lang: string) => {
|
const setLanguage = (lang: Langs) => {
|
||||||
i18n.setLanguage(lang)
|
i18n.setLanguage(lang)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,10 +57,10 @@ const createI18n = (): I18n => {
|
||||||
return i18n = {
|
return i18n = {
|
||||||
locale: locale.value,
|
locale: locale.value,
|
||||||
fallbackLocale: 'zh-cn',
|
fallbackLocale: 'zh-cn',
|
||||||
availableLocales: Object.keys(messages),
|
availableLocales: Object.keys(messages) as Langs[],
|
||||||
messages,
|
messages,
|
||||||
message: messages[locale.value],
|
message: messages[locale.value],
|
||||||
setLanguage(_locale: string) {
|
setLanguage(_locale: Langs) {
|
||||||
this.locale = _locale
|
this.locale = _locale
|
||||||
this.message = messages[_locale]
|
this.message = messages[_locale]
|
||||||
locale.value = _locale
|
locale.value = _locale
|
||||||
|
@ -74,7 +76,7 @@ const createI18n = (): I18n => {
|
||||||
return val ? this.fillMessage(targetMessage, val) : targetMessage
|
return val ? this.fillMessage(targetMessage, val) : targetMessage
|
||||||
},
|
},
|
||||||
t(key: keyof Message, val?: TranslateValues): string {
|
t(key: keyof Message, val?: TranslateValues): string {
|
||||||
trackReactivityValues()
|
// trackReactivityValues()
|
||||||
return this.getMessage(key, val)
|
return this.getMessage(key, val)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,20 +6,13 @@ type Message = Record<keyof typeof zh_cn, string>
|
||||||
| Record<keyof typeof zh_tw, string>
|
| Record<keyof typeof zh_tw, string>
|
||||||
| Record<keyof typeof en_us, string>
|
| Record<keyof typeof en_us, string>
|
||||||
|
|
||||||
interface Lang {
|
type Messages = Record<(typeof langs)[number]['locale'], Message>
|
||||||
name: string
|
|
||||||
locale: string
|
|
||||||
alternate?: string
|
|
||||||
country: string
|
|
||||||
fallback?: boolean
|
|
||||||
message: Message
|
|
||||||
}
|
|
||||||
|
|
||||||
const langs: Lang[] = [
|
const langs = [
|
||||||
{
|
{
|
||||||
name: '简体中文',
|
name: '简体中文',
|
||||||
locale: 'zh-cn',
|
locale: 'zh-cn',
|
||||||
alternate: 'zh-hans',
|
// alternate: 'zh-hans',
|
||||||
country: 'cn',
|
country: 'cn',
|
||||||
fallback: true,
|
fallback: true,
|
||||||
message: zh_cn,
|
message: zh_cn,
|
||||||
|
@ -27,7 +20,7 @@ const langs: Lang[] = [
|
||||||
{
|
{
|
||||||
name: '繁体中文',
|
name: '繁体中文',
|
||||||
locale: 'zh-tw',
|
locale: 'zh-tw',
|
||||||
alternate: 'zh-hk',
|
// alternate: 'zh-hk',
|
||||||
country: 'cn',
|
country: 'cn',
|
||||||
message: zh_tw,
|
message: zh_tw,
|
||||||
},
|
},
|
||||||
|
@ -37,20 +30,20 @@ const langs: Lang[] = [
|
||||||
country: 'us',
|
country: 'us',
|
||||||
message: en_us,
|
message: en_us,
|
||||||
},
|
},
|
||||||
]
|
] as const
|
||||||
|
|
||||||
const langList: Array<{
|
const langList: Array<{
|
||||||
name: string
|
name: string
|
||||||
locale: string
|
locale: keyof Messages
|
||||||
alternate?: string
|
alternate?: string
|
||||||
}> = []
|
}> = []
|
||||||
type Messages = Record<string, Message>
|
// @ts-expect-error
|
||||||
const messages: Messages = {}
|
const messages: Messages = {}
|
||||||
langs.forEach(item => {
|
langs.forEach(item => {
|
||||||
langList.push({
|
langList.push({
|
||||||
name: item.name,
|
name: item.name,
|
||||||
locale: item.locale,
|
locale: item.locale,
|
||||||
alternate: item.alternate,
|
// alternate: item.alternate,
|
||||||
})
|
})
|
||||||
messages[item.locale] = item.message
|
messages[item.locale] = item.message
|
||||||
})
|
})
|
||||||
|
@ -58,6 +51,9 @@ langs.forEach(item => {
|
||||||
export {
|
export {
|
||||||
langList,
|
langList,
|
||||||
messages,
|
messages,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type {
|
||||||
Messages,
|
Messages,
|
||||||
Message,
|
Message,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Event as App, Type as AppType } from './AppEvent'
|
import { Event as App, Type as AppType } from './AppEvent'
|
||||||
import { Event as List, Type as ListType } from './ListEvent'
|
import { Event as List, Type as ListType } from './ListEvent'
|
||||||
|
|
||||||
export {
|
export type {
|
||||||
AppType,
|
AppType,
|
||||||
ListType,
|
ListType,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
import { createI18n, i18nPlugin, useI18n, I18n } from '@/lang'
|
import type { I18n } from '@/lang'
|
||||||
|
import { createI18n, i18nPlugin, useI18n } from '@/lang'
|
||||||
|
|
||||||
window.i18n = createI18n()
|
window.i18n = createI18n()
|
||||||
|
|
||||||
export {
|
export {
|
||||||
i18nPlugin,
|
i18nPlugin,
|
||||||
useI18n,
|
useI18n,
|
||||||
I18n,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type { I18n }
|
||||||
|
|
|
@ -225,3 +225,4 @@
|
||||||
// getScrollTop,
|
// getScrollTop,
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
export {}
|
||||||
|
|
|
@ -14,7 +14,7 @@ const initPrevPlayInfo = async() => {
|
||||||
window.lx.restorePlayInfo = null
|
window.lx.restorePlayInfo = null
|
||||||
if (!info?.listId || info.index < 0) return
|
if (!info?.listId || info.index < 0) return
|
||||||
const list = await getListMusics(info.listId)
|
const list = await getListMusics(info.listId)
|
||||||
if (!list?.[info.index]) return
|
if (!list[info.index]) return
|
||||||
window.lx.restorePlayInfo = info
|
window.lx.restorePlayInfo = info
|
||||||
playList(info.listId, info.index)
|
playList(info.listId, info.index)
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,9 @@ export const registerEvents = () => {
|
||||||
// // unregisterRendererEvents()
|
// // unregisterRendererEvents()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
export { AppEventTypes } from './appEvent'
|
export { clearDownKeys } from './keyEvent'
|
||||||
export { KeyEventTypes, clearDownKeys } from './keyEvent'
|
|
||||||
|
export type { AppEventTypes } from './appEvent'
|
||||||
|
export type { KeyEventTypes } from './keyEvent'
|
||||||
|
|
||||||
registerEvents()
|
registerEvents()
|
||||||
|
|
|
@ -19,6 +19,8 @@ import router from './router'
|
||||||
|
|
||||||
import { getSetting, updateSetting } from './utils/ipc'
|
import { getSetting, updateSetting } from './utils/ipc'
|
||||||
import { langList } from '@/lang'
|
import { langList } from '@/lang'
|
||||||
|
import type { I18n } from '@/lang/i18n'
|
||||||
|
|
||||||
import { initSetting } from './store/setting'
|
import { initSetting } from './store/setting'
|
||||||
// import { bubbleCursor } from './utils/cursor-effects/bubbleCursor'
|
// import { bubbleCursor } from './utils/cursor-effects/bubbleCursor'
|
||||||
|
|
||||||
|
@ -40,8 +42,8 @@ void getSetting().then(setting => {
|
||||||
// window.lx.appSetting = setting
|
// window.lx.appSetting = setting
|
||||||
// Set language automatically
|
// Set language automatically
|
||||||
if (!setting['common.langId'] || !window.i18n.availableLocales.includes(setting['common.langId'])) {
|
if (!setting['common.langId'] || !window.i18n.availableLocales.includes(setting['common.langId'])) {
|
||||||
let langId = null
|
let langId: I18n['locale'] | null = null
|
||||||
let locale = window.navigator.language.toLocaleLowerCase()
|
let locale = window.navigator.language.toLocaleLowerCase() as I18n['locale']
|
||||||
if (window.i18n.availableLocales.includes(locale)) {
|
if (window.i18n.availableLocales.includes(locale)) {
|
||||||
langId = locale
|
langId = locale
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
import { createI18n, i18nPlugin, useI18n, I18n } from '@/lang'
|
import type { I18n } from '@/lang'
|
||||||
|
import { createI18n, i18nPlugin, useI18n } from '@/lang'
|
||||||
|
|
||||||
window.i18n = createI18n()
|
window.i18n = createI18n()
|
||||||
|
|
||||||
export {
|
export {
|
||||||
i18nPlugin,
|
i18nPlugin,
|
||||||
useI18n,
|
useI18n,
|
||||||
I18n,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type { I18n }
|
||||||
|
|
|
@ -17,7 +17,7 @@ export const setUserLists = (lists: LX.List.UserListInfo[]) => {
|
||||||
|
|
||||||
export const setMusicList = (listId: string, musicList: LX.Music.MusicInfo[]) => {
|
export const setMusicList = (listId: string, musicList: LX.Music.MusicInfo[]) => {
|
||||||
const list = shallowReactive(markRawList(musicList))
|
const list = shallowReactive(markRawList(musicList))
|
||||||
allMusicList.set(listId, shallowReactive(musicList))
|
allMusicList.set(listId, list)
|
||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@ import { markRawList } from '@common/utils/vueTools'
|
||||||
import music from '@renderer/utils/musicSdk'
|
import music from '@renderer/utils/musicSdk'
|
||||||
import { sortInsert, similar } from '@common/utils/common'
|
import { sortInsert, similar } from '@common/utils/common'
|
||||||
|
|
||||||
import { sources, maxPages, listInfos, ListInfoItem, SearchListInfo } from './state'
|
import type { ListInfoItem, SearchListInfo } from './state'
|
||||||
|
import { sources, maxPages, listInfos } from './state'
|
||||||
|
|
||||||
interface SearchResult {
|
interface SearchResult {
|
||||||
list: ListInfoItem[]
|
list: ListInfoItem[]
|
||||||
|
|
|
@ -5,7 +5,7 @@ import music from '@renderer/utils/musicSdk'
|
||||||
|
|
||||||
import { ListInfo } from '@renderer/store/songList/state'
|
import { ListInfo } from '@renderer/store/songList/state'
|
||||||
|
|
||||||
export { ListInfoItem } from '@renderer/store/songList/state'
|
export type { ListInfoItem } from '@renderer/store/songList/state'
|
||||||
|
|
||||||
export const sources: Array<LX.OnlineSource | 'all'> = markRaw([])
|
export const sources: Array<LX.OnlineSource | 'all'> = markRaw([])
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,12 @@
|
||||||
import { deduplicationList, toNewMusicInfo } from '@renderer/utils'
|
import { deduplicationList, toNewMusicInfo } from '@renderer/utils'
|
||||||
import musicSdk from '@renderer/utils/musicSdk'
|
import musicSdk from '@renderer/utils/musicSdk'
|
||||||
import { markRaw, markRawList } from '@common/utils/vueTools'
|
import { markRaw, markRawList } from '@common/utils/vueTools'
|
||||||
|
import type { ListDetailInfo, ListInfoItem, ListInfo } from './state'
|
||||||
import {
|
import {
|
||||||
tags,
|
tags,
|
||||||
TagInfo,
|
TagInfo,
|
||||||
listInfo,
|
listInfo,
|
||||||
listDetailInfo,
|
listDetailInfo,
|
||||||
ListDetailInfo,
|
|
||||||
ListInfoItem,
|
|
||||||
ListInfo,
|
|
||||||
selectListInfo,
|
selectListInfo,
|
||||||
isVisibleListDetail,
|
isVisibleListDetail,
|
||||||
openSongListInputInfo,
|
openSongListInputInfo,
|
||||||
|
|
|
@ -53,7 +53,7 @@ export const getFontSizeWithScreen = (screenWidth: number = window.innerWidth):
|
||||||
|
|
||||||
|
|
||||||
export const deduplicationList = <T extends LX.Music.MusicInfo>(list: T[]): T[] => {
|
export const deduplicationList = <T extends LX.Music.MusicInfo>(list: T[]): T[] => {
|
||||||
const ids: Set<string | number> = new Set()
|
const ids: Set<string> = new Set()
|
||||||
return list.filter(s => {
|
return list.filter(s => {
|
||||||
if (ids.has(s.id)) return false
|
if (ids.has(s.id)) return false
|
||||||
ids.add(s.id)
|
ids.add(s.id)
|
||||||
|
|
|
@ -3,7 +3,8 @@ import { ref, nextTick } from '@common/utils/vueTools'
|
||||||
import { addHistoryWord } from '@renderer/store/search/action'
|
import { addHistoryWord } from '@renderer/store/search/action'
|
||||||
// import { useI18n } from '@renderer/plugins/i18n'
|
// import { useI18n } from '@renderer/plugins/i18n'
|
||||||
// import { } from '@renderer/store/search/state'
|
// import { } from '@renderer/store/search/state'
|
||||||
import { search as searchSongList, listInfos, SearchListInfo, ListInfoItem } from '@renderer/store/search/songlist'
|
import type { SearchListInfo, ListInfoItem } from '@renderer/store/search/songlist'
|
||||||
|
import { search as searchSongList, listInfos } from '@renderer/store/search/songlist'
|
||||||
|
|
||||||
export declare type SearchSource = LX.OnlineSource | 'all'
|
export declare type SearchSource = LX.OnlineSource | 'all'
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, defineEmits, defineExpose } from '@common/utils/vueTools'
|
import { ref, defineEmits, defineExpose } from '@common/utils/vueTools'
|
||||||
import { ListInfo, ListInfoItem } from '@renderer/store/songList/state'
|
import type { ListInfo, ListInfoItem } from '@renderer/store/songList/state'
|
||||||
// import LX from '@renderer/types/lx'
|
// import LX from '@renderer/types/lx'
|
||||||
import { useRoute, useRouter } from '@common/utils/vueRouter'
|
import { useRoute, useRouter } from '@common/utils/vueRouter'
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
"$schema": "https://json.schemastore.org/tsconfig",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||||
|
|
||||||
|
@ -82,7 +83,7 @@
|
||||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||||
|
|
||||||
/* Interop Constraints */
|
/* Interop Constraints */
|
||||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
"isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||||
"allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
"allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||||
"esModuleInterop": false, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
"esModuleInterop": false, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
||||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||||
|
|
Loading…
Reference in New Issue