Microsoft/TypeScript

Wrong elementwise error location on optional object property that allows arrays too

Open

#57.541 aberto em 26 de fev. de 2024

Ver no GitHub
 (0 comments) (0 reactions) (0 assignees)TypeScript (6.726 forks)batch import
Domain: Related Error SpansHelp WantedPossible Improvement

Métricas do repositório

Stars
 (48.455 stars)
Métricas de merge de PR
 (Mesclagem média 6d 17h) (9 fundiu PRs em 30d)

Description

🔎 Search Terms

error location elementwise elaboration array optional object

🕗 Version & Regression Information

  • This is a crash
  • This changed between versions ______ and _______
  • This changed in commit or PR _______
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________
  • I was unable to test this on prior versions because _______

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.5.0-dev.20240225#code/C4TwDgpgBAyglgOwOYBsIHkBOBBTmCGIAPACoB8UAvFCVAD5SYT4AmA9giiDQNoC6AbgBQQ0JCgAFTGwBucFhBbYAxsDaYqUAN5CoUAM6ZlALgPBMiJML2IwAV2AB+U3YQBrBGwDuCYQF9hUXBoAFl8ZQALRAgAYQ4AMzgkUhU1TH0oCAAPYAgEFgypWXlFVPUKah0bBBk2NwhnWEs0LFwCYhIy9LJ-QIVlFHwmKHjXVTgOAwhgOzAU1XUM7Nz8wuk5BSUFzDIACgBKUyqoZSZ8XLDI6NNd5QSk00uohFj75M7t-TJ9qgpa+V6In001mRC0BiMpgARPFppEAKrAzBQgRQWwOUz6cyWKB+Pb7AB0p2YF3Czwgu2OiFq9SOuj0EJMUBhcIiiIgyIANPTqvZgKYAIwABm5ej83L8+2EQA

💻 Code

type SingleOrArray<T> = T | readonly T[];

type ProvidedActor = {
  src: string;
  input?: unknown;
};

type MachineConfig<TActors extends ProvidedActor> = {
  invoke?: SingleOrArray<TActors>;
};

declare function setup<TActors extends ProvidedActor>(): {
  createMachine: (config: MachineConfig<TActors>) => void;
};

setup<{ src: "fetchUser"; input: string }>().createMachine({
  invoke: {
    src: "fetchUser",
    input: 10,
  },
});

🙁 Actual behavior

invoke property gets highlighted

🙂 Expected behavior

input property should get highlighted as it's the one that it's not correct and it's more specific than invoke

Additional information about the issue

we can observe the error location to change when:

  1. we remove optionality from invoke
  2. we make the provided type argument a union

Guia do colaborador