fix: useI18n type

This commit is contained in:
vben 2021-01-11 21:05:16 +08:00
parent 3509ebec16
commit c22de5c35b
2 changed files with 21 additions and 5 deletions

View File

@ -1,6 +1,21 @@
import { i18n } from '/@/locales/setupI18n';
export function useI18n(namespace?: string) {
type I18nGlobalTranslation = {
(key: string): string;
(key: string, locale: string): string;
(key: string, locale: string, list: unknown[]): string;
(key: string, locale: string, named: Record<string, unknown>): string;
(key: string, list: unknown[]): string;
(key: string, named: Record<string, unknown>): string;
};
type I18nTranslationRestParameters = [string, any];
export function useI18n(
namespace?: string
): {
t: I18nGlobalTranslation;
} {
function getKey(key: string) {
if (!namespace) {
return key;
@ -22,9 +37,9 @@ export function useI18n(namespace?: string) {
const { t, ...methods } = i18n.global;
const tFn: typeof t = (key: string, ...arg: any) => {
const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => {
if (!key) return '';
return t(getKey(key), ...(arg as Parameters<typeof t>));
return t(getKey(key), ...(arg as I18nTranslationRestParameters));
};
return {
...methods,

View File

@ -1,5 +1,6 @@
<template>
<PageWrapper title="图片预览示例">
<ImagePreview :imageList="imgList" />
<Alert message="有预览图" type="info" />
<div class="flex justify-center mt-4">
<img :src="img" v-for="img in imgList" :key="img" class="mr-2" @click="handleClick(img)" />
@ -11,7 +12,7 @@
<script lang="ts">
import { defineComponent } from 'vue';
import { Alert } from 'ant-design-vue';
import { createImgPreview } from '/@/components/Preview/index';
import { createImgPreview, ImagePreview } from '/@/components/Preview/index';
import { PageWrapper } from '/@/components/Page';
const imgList: string[] = [
@ -20,7 +21,7 @@
'https://picsum.photos/id/68/346/216',
];
export default defineComponent({
components: { Alert, PageWrapper },
components: { Alert, PageWrapper, ImagePreview },
setup() {
function handleClick(img: string) {
createImgPreview({ imageList: [img] });