Для сохранения типа, при использовании provide/inject в виде ключа необходимо использовать
InjectionKey<T>
. Этот момент описан в
документации Vue3 по применению inject/provide, а именно:
When using TypeScript, the key can be a symbol casted as InjectionKey - a Vue provided utility type that extends Symbol, which can be used to sync the value type between provide() and inject().
Т.е. в вашем случае, вы можете создать что-то подобие injection-keys.ts:
import {InjectionKey} from 'vue';
// InjectionKey<T>, где T представляет явно передаваемый тип, который отслеживается при provide/inject
export const localizeFilterKey: InjectionKey<(key: string) => string> = Symbol();
А потом импортировать этот файл везде, где используется inject/provide с необходимыми ключами.
В случае с применением provide:
import localizeFilterKey from '@/injection-keys'
...
app.provide(localizeFilterKey, localizeFilter)
...
и соответственно в случае с применением inject:
import localizeFilterKey from '@/injection-keys'
...
const messagePlagin = inject(localizeFilterKey);
...
Примеры сильно упрощенные, но надеюсь это сможет вам помочь.