美文网首页
2023-03-10

2023-03-10

作者: 芗芗_ | 来源:发表于2023-03-10 00:00 被阅读0次

covariance 和 contraviance

https://dmitripavlutin.com/typescript-covariance-contravariance/

The function type is contravariant by the parameter types, but covariant by the return types.

image.png

https://www.typescriptlang.org/play?#code/C4TwDgpgBAyglgcwHYEklQLxQBQBMCGw+AXFAN4QC2+cANqQM7ABOcSCANFGPgwwO4B7ZrkYs2CAL5QAlJgB8UAG6C4uANwAoUJCgAFZoLANMUHASKkAShADGw3AB4mrdlwCuSANZJB-JPJyGIoqaprhAPQRZgyIqOgAFvhK0AyQtnAAZnC2UDrQuIIQJr7AUELMXlCa9khMULHIaKTwTehYeIQk5FQ09A3ibty8Ag5irlJBimRQtQyCtBAAdLSCCJ1ES710XBb4Szx8FbhyklpzZYJIMO4ARpRwwMQGRiZYDXFokdHACXAmFS8DBqV3qVxu90eACZnoZjKYcBRqDthkcHJIpuRZqCFstVuttrQuIdRiIZJIgA

// This issue can be also tackled with generics like this

type SignInData = {email: string, password: string};
type SignIn = (data: SignInData) => void;
const signIn: SignIn = async ({email, password}) => { console.log(email, password) };

type Props<DATA extends Record<string, unknown>> = { onSubmit: (data: DATA) => void};

const onSubmit: Props<SignInData> = {onSubmit: signIn};

https://github.com/Microsoft/TypeScript/pull/21496
infer 关键字在conditional type

主要要看下infered type对于协变(union type)和逆变(intersection )的处理

The following example demonstrates how multiple candidates for the same type variable in co-variant positions causes a union type to be inferred:

type Foo<T> = T extends { a: infer U, b: infer U } ? U : never;
type T10 = Foo<{ a: string, b: string }>;  // string
type T11 = Foo<{ a: string, b: number }>;  // string | number

Likewise, multiple candidates for the same type variable in contra-variant positions causes an intersection type to be inferred:

type Bar<T> = T extends { a: (x: infer U) => void, b: (x: infer U) => void } ? U : never;
type T20 = Bar<{ a: (x: string) => void, b: (x: string) => void }>;  // string
type T21 = Bar<{ a: (x: string) => void, b: (x: number) => void }>;  // string & number

相关文章

  • 2023-03-10

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

  • 2023-03-10

    【每日一读】不能否认现行教材的课程价值,落实新课标不必全盘推翻旧教材;但也不赞成陈先云先生关于不能改变教材单元体系...

  • 2023-03-10

    澳大利亚联邦(The Commonwealth of Australia),简称澳大利亚,首都堪培拉[https:...

  • 2023-03-10

    昨天晚上的信号不好,还是简书本身的问题,我都写好了,就是公开发布不了。 所以日更又断了。 这次我很平静,也没有一点...

  • 2023-03-10

    保护自我价值感 1.记住自己的优点和成就 每个人都有优点和缺点,遇到挫折时容易信心受到打击。更需要放大自己的优点和...

  • 2023-03-10

    宣,还正如他们说的,到了一定年纪遵守世界运行的规则,人格逐渐呆痴,出言迟缓空洞,行动缓慢笨拙,年轻真好,有股劲真好...

  • 2023-03-10

    2023.3.10今日体验:生活中遇到的低谷坎坷,当时觉得太难过了,但一旦过去,回头看时也不过如此。时间并不能解决...

  • 2023-03-10

    好久不监考,甚是不适应。 今天上午监考,又想起打发监考时间这件事 总的来说,还是要有发散思维,善于联想和想象,热爱...

  • 2023-03-10

    刚刚,淋了一场小雨。擦拭掉身上的雨水,回头望见桌上那把折伞。手,轻轻抚过伞面。她的气息在这样的雨天,悄悄在屋子里蔓...

  • 2023-03-10

    窗外春天有种湿漉漉的感觉,可能被昨晚的大月亮温润的 昨天补足了觉,春天的少年确是一天下来就亏的,床上翻滚5分钟起来...

网友评论

      本文标题:2023-03-10

      本文链接:https://www.haomeiwen.com/subject/riezldtx.html