Skip to content

Commit b1144e2

Browse files
authored
fix: typescript errors with vue-tsc on vue-i18n-bridge (#799)
closes #788
1 parent 7366d63 commit b1144e2

File tree

5 files changed

+66
-6
lines changed

5 files changed

+66
-6
lines changed

docs/guide/migration/ways.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ import { createI18n, useI18n, castToVueI18n } from 'vue-i18n-bridge'
128128
Vue.use(VueCompositionAPI)
129129
Vue.use(VueI18n, { bridge: true })
130130

131-
const i18n = createI18n({
131+
// you need to cast `i18n` instance
132+
const i18n = castToVueI18n(createI18n({
132133
locale: 'ja',
133134
messages: {
134135
en: {
@@ -142,11 +143,11 @@ const i18n = createI18n({
142143
}
143144
}
144145
}
145-
}, VueI18n)
146+
}, VueI18n))
146147

147148
Vue.use(i18n)
148149

149-
const app = new Vue({ i18n: castToVueI18n(i18n) }) // you need to cast `i18n` instance
150+
const app = new Vue({ i18n })
150151
app.$mount('#app')
151152
```
152153

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"build:size-petite-vue-i18n": "cd packages/size-check-petite-vue-i18n && npm run build",
2323
"build:size-vue-i18n": "cd packages/size-check-vue-i18n && npm run build",
2424
"build:sourcemap": "npm run build -- --sourcemap",
25-
"build:type": "npm run build -- --types && tail -n +32 ./packages/vue-i18n/src/vue.d.ts >> ./packages/vue-i18n/dist/vue-i18n.d.ts && tail -n +32 ./packages/petite-vue-i18n/src/vue.d.ts >> ./packages/petite-vue-i18n/dist/petite-vue-i18n.d.ts && tail -n +32 ./packages/vue-i18n-bridge/src/vue.d.ts >> ./packages/vue-i18n-bridge/dist/vue-i18n-bridge.d.ts",
25+
"build:type": "./scripts/build.sh",
2626
"build:typed": "npm run build -- core-base vue-i18n-core --types",
2727
"clean": "run-p clean:*",
2828
"clean:cache": "npm run clean:cache:jest",

packages/vue-i18n-core/src/i18n.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -784,11 +784,15 @@ export function useI18n<
784784
*
785785
* @VueI18nGeneral
786786
*/
787-
export const castToVueI18n = /* #__PURE__*/ (i18n: I18n): VueI18n => {
787+
export const castToVueI18n = /* #__PURE__*/ (
788+
i18n: I18n
789+
): VueI18n & { install: (Vue: any, options?: any) => void } => {
788790
if (!(__VUE_I18N_BRIDGE__ in i18n)) {
789791
throw createI18nError(I18nErrorCodes.NOT_COMPATIBLE_LEGACY_VUE_I18N)
790792
}
791-
return i18n as unknown as VueI18n
793+
return i18n as unknown as VueI18n & {
794+
install: (Vue: any, options?: any) => void
795+
}
792796
}
793797

794798
function createGlobal(

scripts/build.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
3+
set -xe
4+
5+
6+
npm run build -- --types
7+
8+
tail -n +32 ./packages/vue-i18n/src/vue.d.ts >> ./packages/vue-i18n/dist/vue-i18n.d.ts
9+
tail -n +32 ./packages/petite-vue-i18n/src/vue.d.ts >> ./packages/petite-vue-i18n/dist/petite-vue-i18n.d.ts
10+
tail -n +32 ./packages/vue-i18n-bridge/src/vue.d.ts >> ./packages/vue-i18n-bridge/dist/vue-i18n-bridge.d.ts
11+
12+
node -r esbuild-register scripts/postprocess.ts

scripts/postprocess.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import path from 'pathe'
2+
import { promises as fs } from 'fs'
3+
4+
function replaceWithCompositionApi(source: string, target: string) {
5+
return source.replace(
6+
`{ ${target} } from 'vue';`,
7+
`{ ${target} } from '@vue/composition-api';`
8+
)
9+
}
10+
11+
async function main() {
12+
let source = await fs.readFile(
13+
path.resolve(
14+
__dirname,
15+
'../packages/vue-i18n-bridge/dist/vue-i18n-bridge.d.ts'
16+
),
17+
'utf8'
18+
)
19+
20+
source = [
21+
'App',
22+
'ComponentInternalInstance',
23+
'ComputedRef',
24+
'InjectionKey',
25+
'WritableComputedRef'
26+
].reduce(
27+
(source, target) => replaceWithCompositionApi(source, target),
28+
source
29+
)
30+
31+
await fs.writeFile(
32+
path.resolve(
33+
__dirname,
34+
'../packages/vue-i18n-bridge/dist/vue-i18n-bridge.d.ts'
35+
),
36+
source
37+
)
38+
}
39+
40+
main().catch(err => {
41+
console.error(err)
42+
process.exit(1)
43+
})

0 commit comments

Comments
 (0)