【问题标题】:Typescript arrow function with signature accepts wrong parameter带有签名的打字稿箭头函数接受错误的参数
【发布时间】:2021-06-25 06:48:47
【问题描述】:

考虑类型:

type GenericFunction = <T>(props: Array<T>) => void

和箭头函数:

const test: GenericFunction = <X>(props: X) => {
let dd: X }

test 函数为什么接受 X 作为参数,尽管类型 GenericFunction 定义了 Array&lt;T&gt; 作为参数?

【问题讨论】:

    标签: typescript generics arrow-functions


    【解决方案1】:

    X 的某些类型将满足GenericFunction 的签名,这就是编译器不会给出错误的原因。现在只是一个隐式约束,X 必须是数组类型。

    仅当您为 X 添加与此隐式约束冲突的约束时,您才会收到错误:

    // this gives a compile error
    const test: GenericFunction = <X extends number>(props: X) => {};
    

    【讨论】:

    • 这是可以理解的,但对我来说似乎有点不正确。例如test 函数将像test&lt;number&gt;(new Array&lt;number&gt;()) 一样被调用。所以在我看来 X 在这种情况下代表数字而不是 Array&lt;number&gt;
    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 2017-08-08
    • 2016-08-26
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多