在下面的代码中,为什么在定义类型时返回不同的结果,而不是输入相同的类型作为泛型:
type StrictEqual<A1, A2> = [A1] extends [A2] ? ([A2] extends [A1] ? true : false) : false
const typesMatch = <A, B>(match: StrictEqual<A, B>) => match
type Pins<
Node extends {
Error: unknown
Output: unknown
ResultResolverController: unknown
},
AccumulatedTypes extends {
AccumulatedErrorResolverControllers: unknown
},
> = {
(result: Node['Output']): Node['ResultResolverController']
error: (error: Node['Error']) => AccumulatedTypes['AccumulatedErrorResolverControllers']
}
type Foo = Pins<
{
Output: 'OutputN2'
Error: 'ErrorN2'
ResultResolverController: 'ResResolverN2'
},
{
AccumulatedErrorResolverControllers: 'ErrResolverN1' | 'ErrResolverN2'
}
>
type Bar = Pins<
{
Error: unknown
Output: unknown
ResultResolverController: unknown
ErrorResolverController: unknown
} & {
Output: 'OutputN2'
Error: 'ErrorN2'
ResultResolverController: 'ResResolverN2'
ErrorResolverController: 'ErrResolverN2'
},
{
AccumulatedErrors: 'ErrorN1' | 'ErrorN2'
AccumulatedOutputs: 'OutputN1' | 'OutputN2'
AccumulatedResultResolverControllers: 'ResResolverN1' | 'ResResolverN2'
AccumulatedErrorResolverControllers: 'ErrResolverN1' | 'ErrResolverN2'
}
>
typesMatch<Foo,Bar>(true) // works
typesMatch<
Pins<
{
Output: 'OutputN2'
Error: 'ErrorN2'
ResultResolverController: 'ResResolverN2'
},
{
AccumulatedErrorResolverControllers: 'ErrResolverN1' | 'ErrResolverN2'
}
>, // should be the same as Foo
Pins<
{
Error: unknown
Output: unknown
ResultResolverController: unknown
ErrorResolverController: unknown
} & {
Output: 'OutputN2'
Error: 'ErrorN2'
ResultResolverController: 'ResResolverN2'
ErrorResolverController: 'ErrResolverN2'
},
{
AccumulatedErrors: 'ErrorN1' | 'ErrorN2'
AccumulatedOutputs: 'OutputN1' | 'OutputN2'
AccumulatedResultResolverControllers: 'ResResolverN1' | 'ResResolverN2'
AccumulatedErrorResolverControllers: 'ErrResolverN1' | 'ErrResolverN2'
}
> // should be the same as Bar
>(true) // doesn't work!
code个