Skip to content

Common property check isn't performed when the target has any index signature #55709

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Andarist opened this issue Sep 11, 2023 · 0 comments
Open
Labels
Possible Improvement The current behavior isn't wrong, but it's possible to see that it might be better in some cases

Comments

@Andarist
Copy link
Contributor

πŸ”Ž Search Terms

common property check weak type index signature

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

https://www.typescriptlang.org/play?noErrorTruncation=true&ts=5.3.0-dev.20230911#code/C4TwDgpgBAIhA2BDEAeAKnJIoQB7AgDsATAZylOACcBLQgcwD4oBeKDBZKAHykIFcAtgCMIVANwAoSXQJUAZogDG0ALLKAFnQgBhAPaF5Neukxc8BEuUq0GzAN6SoUUJFIB+AFxR+hANaEegDuhFLOiPJyXlCOzs4A2gDSUHSwnKgcWIwAutECImJhUAC+UsXSxBBKSFTQ8r5KwDQGLhCUKE7sZtgWRGQU1HT0ADSdaPqGxjj4feTqSlqEugZGJpnIjKOMABRKK8be9i7gbYdQlVik3uvYxSVQAGTsE6sAlN4Abno0xFKSBJRtrFjm5DndEORgc4LsgrlAAEQGaCkKoGYjwngIpFQQR0fgEeFFYqjcKRMSHTrOAD0VKgAAFgKQALR4SCNFlUKh6KiUqB6PRgUgAfWAWmFNGFvgCwUIQphIG8AEYAAzKkklUbFV5-eqERrNQitSgAJnQ00s-SO8Vw3gABj8mQASez5URUYq27LeGxDEo7RDXV4xcoA4DGoGdGn0xks3Bs4Acrk85xURAkPSCbzUfgQTXa6S6-UtUMAZjNvSsMSg1u9IBEengXoGtnofu2AfYQfsIbawBLEeptIZzNZVQTYiTnVT6czLioObzUiAA

πŸ’» Code

type Delay<TDelay extends string> = TDelay | number;

interface MachineConfig<TDelay extends string> {
  types?: unknown;
  after?: {
    [K in Delay<TDelay>]?: number;
  };
}

declare function test<
  TDelay extends string,
  TConfig extends MachineConfig<TDelay>,
>(config: { types: { delays: TDelay } } & TConfig): void;

test({
  types: {} as {
    delays: "one second" | "one minute";
  },
  after: {
    // @ts-expect-error
    oops_this_is_unknown_delay: 100,
  },
});

function test2<T extends { [x: `id-${number}`]: string }>(a: T) {}
test2({
  // @ts-expect-error
  random: true,
});

function test3<T extends { [x: symbol]: string }>(a: T) {}
test3({
  // @ts-expect-error
  random: true,
});

πŸ™ Actual behavior

No errors are raised here since index signatures turn off the common property check completely.

πŸ™‚ Expected behavior

I don't have a good intuition about the common property check so I'm not sure if all of those 3 examples should be treated as bugs/possible improvements. I think though that especially the first one is surprising because I have a list of 2 concrete string properties that are meant to be allowed there and yet the unrelated~ index signature for numbers turns off this check, leading to accidental problems at runtime.

Additional information about the issue

No response

@andrewbranch andrewbranch added the Possible Improvement The current behavior isn't wrong, but it's possible to see that it might be better in some cases label Sep 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Possible Improvement The current behavior isn't wrong, but it's possible to see that it might be better in some cases
Projects
None yet
Development

No branches or pull requests

2 participants