microsoft / microsoft/TypeScript
Unable to infer parameters for generic constructor/functions with a distributive conditional type
- 主要语言
- Go
- 星标
- 111k
- 派生
- 14.3k
- 平均合并
- 2 天 4 小时
- 30 天内合并 PR
- 132
描述
### 🔎 Search Terms
generic constructor, generic function, branded string, `ConstructorParameters`, `Parameters`, unable to infer.
### 🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ
### ⏯ Playground Link
https://www.typescriptlang.org/play/?#code/KYDwDg9gTgLgBAbwL4G4CwAoTBLAdjYKAMwEMBjYOAfQFkSxFM44iIIAuROEzgRgCYAzHCSZRWDDACeYSjQgATAK4AbYAGUlAIwAqMygF44AIi0koxuADIuWqCVwLOMKEsqpMmabLh0GR2nprOAAlYDJoBQAeeWU1TV19ABpbFRIAC04AZxc8AHMRAD5PSX04BL1ZAHFgGCimcu1KylACRyy4HKh8pIa-OFbgdtDwyKiK5LglXABrXAgAd1xC3oxCuCMJn0Hh6bnF3EwAfi5vYCPOLfdgvwBtK4BdTE5cYAA3QnQJAHpvuB10tgOkC4DB0pQALYQHKdFwkbB5dIwVhQBbmBRwNFSOAASTgZAcLARSiglAgSngMAg+IgEMoVNBgOBWSybnYXjKOmAOQACuYSHSCFAOkY+fZBYQslEojoBiA2goOsZWBBLAAfXyKVQaJr6QoACnMeUuuuqtRlKT8hQAlBt1m8INgFMUML9mHAAHonV4fKAlN146AIvAkFQqbFDCLTIXADHYeALePpbj4tIsuAqbAzelM9kYBThNKk1MkdNcnIyuUKpUq9WauI6xKydYIBoRXBdJRkKlQQ1QY2NJvAGp1HSW+g2r7iDk+cswADCEA7Li7PbFAtqko2cEXy9c3eg64lwqiZwgRH+3JghS+buYXrgPsIQA
### 💻 Code
```ts
export {};
interface _Map {
foo: { a: 123 }
}
type ModuleSubType = "bar" & { brand: true };
type Map = _Map & Record
type SubTypeGet<
SubType extends string,
Map extends Record,
> = SubType extends unknown
? { type?: SubType } & Map[SubType]
: never;
// This is the most straightforward way I can figure out to come to this issue:
type TestParameters = Parameters<(arg: SubTypeGet) => void>
// ^? never
// I originally encountered it with a class like this:
declare class Test {
constructor(arg: SubTypeGet);
}
type TestConstructorParameters = ConstructorParameters;
// ^? never
```
### 🙁 Actual behavior
`Parameters` fails to infer anything.
### 🙂 Expected behavior
`Parameters` should infer _something,_ probably `[arg: { type?: ModuleSubType | undefined; } | ({ type?: "foo" | undefined; } & { a: 123; })]` as it would if the function/class were instantiated.
### Additional information about the issue
_No response_
贡献指南
调研方向
将链接的 Playground 复现作为第一个切入点;检查在泛型函数和构造函数示例中,分布式条件类型如何通过 Parameters 和 ConstructorParameters 传递。完成的标准是两个工具都能推断出与预期行为一致的非 never 参数元组,并且现有复现不再失败。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- typescript
- 领域
- compilers
- Issue 类型
- 缺陷
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100