microsoft / microsoft/TypeScript

Confusing/inconsistent error messages when erroring on disallowed merge

Aperta
#59,808 9 commenti 1 reazione 1 assegnatario Vedi su GitHub

@iisaduan ci sta già lavorando.

Dal 26/9/2024.

Domain: Error Messages Possible Improvement
Lingua principale
Go
Stelle
111k
Fork
14.4k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

🔎 Search Terms

Duplicate identifier 'VueI18n'.
Subsequent property declarations must have the same type.

🕗 Version & Regression Information
  • This changed between versions 5.4.5 and 5.5.2

Behavior is the same with 5.7.0-dev.20240830

⏯ Playground Link

No response

💻 Code

shims-augment.d.ts:


/**
 * Overloads VueI18n interface to avoid needing to cast return value to string.
 * @see https://github.com/kazupon/vue-i18n/issues/410
 * It can be resolved with vue-i18n >= 9 (that only works with Vue 3 currently)
 */
import VueI18n from 'vue-i18n/types'
declare module 'vue-i18n/types' {
  export default class VueI18n {
    t (key: Path, locale: Locale, values?: Values): string
    t (key: Path, values?: Values): string
  }
}

declare module 'vue/types/vue' {
  interface Vue {
    $t: typeof VueI18n.prototype.t
  }
}

Excerpt of vue-i18n/types/index.d.ts:




declare namespace VueI18n {
  type Path = string;
  type Locale = string;
  type FallbackLocale = string | string[] | false | { [locale: string]: string[] }
  type Values = any[] | { [key: string]: any };
  type Choice = number;
  interface MessageContext {
    list(index: number): unknown
    named(key: string): unknown
    linked(key: string): VueI18n.TranslateResult
    values: any
    path: string
    formatter: Formatter
    messages: LocaleMessages
    locale: Locale
  }
  type MessageFunction = (ctx: MessageContext) => string;
  type LocaleMessage = string | MessageFunction | LocaleMessageObject | LocaleMessageArray;
  interface LocaleMessageObject { [key: string]: LocaleMessage; }
  interface LocaleMessageArray { [index: number]: LocaleMessage; }
  interface LocaleMessages { [key: string]: LocaleMessageObject; }
  type TranslateResult = string | LocaleMessages;
}

declare class VueI18n {
  constructor(options?: VueI18n.I18nOptions)

  readonly messages: VueI18n.LocaleMessages;
  readonly dateTimeFormats: VueI18n.DateTimeFormats;
  readonly numberFormats: VueI18n.NumberFormats;
  readonly availableLocales: VueI18n.Locale[];

  locale: VueI18n.Locale;
  fallbackLocale: VueI18n.FallbackLocale;
  missing: VueI18n.MissingHandler;
  formatter: VueI18n.Formatter;
  formatFallbackMessages: boolean;
  silentTranslationWarn: boolean | RegExp;
  silentFallbackWarn: boolean | RegExp;
  preserveDirectiveContent: boolean;
  pluralizationRules: VueI18n.PluralizationRulesMap;
  warnHtmlInMessage: VueI18n.WarnHtmlInMessageLevel;
  postTranslation: VueI18n.PostTranslationHandler;
  sync: boolean;

  t(key: VueI18n.Path, values?: VueI18n.Values): VueI18n.TranslateResult;
  t(key: VueI18n.Path, locale: VueI18n.Locale, values?: VueI18n.Values): VueI18n.TranslateResult;
}

declare module 'vue/types/vue' {
  interface Vue {
    readonly $i18n: VueI18n & IVueI18n;
    $t: typeof VueI18n.prototype.t;
  }
}

🙁 Actual behavior

Capture d’écran_2024-08-30_17-26-45

Capture d’écran_2024-08-30_17-28-08

On top of that, since $t is in error, my whole code base reports an error whenever it uses the returned value of $t as a string.

🙂 Expected behavior

No error were reported with 5.4.5

Additional information about the issue

I apologize if it's a feature, not a bug, but I wasn't able to find any info on this in the release notes.

I know that narrowing is not safe here, I'm wondering why it was allowed with old Typescript, and not anymore.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.