tsx中写泛型报语法错误?

发布于 2022-09-13 00:44:56 字数 322 浏览 11 评论 0

image.png

export const useArray = <T>(initData:T) => {

}

这个函数卸载ts中没有问题,但是卸载tsx中就报语法错误?在tsx中泛型该如何写?

------------------------------分割-------------------------

image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千紇 2022-09-20 00:44:56
function useArray<T>(initData: T) {

}

const useArray2: <T>(initData:T) => void = (initData) => {

}

类型系统总是指导代码“某个变量是某个类型的”,因此你只能指导useArray是什么类型的。箭头函数在这里相当于一个字面量值,这个值满不满足被赋值变量的类型才是关键。

==== 分割线 ====

泛型相当于扩大了类型的包容性
类型约束变量,给变量赋的值要遵循变量的类型

const useArray: <T>(initData: T) => { add: (item: T) => void } = (initData) => {
    return {
        add: (item) => [].push(item),
    }
}

你的类型还是 => void,实际却返回了一个对象就已经跑偏了。并且只要不是定义的地方,施加泛型类型约束都是有问题的。或者你可以摆脱变量赋值的黑洞,

function useArray<T>(initData: T) {
    return {
        add: (item: T) => [].push(item),
    }
}

// 或

function useArray<T>(initData: T): { add: (item: T) => void } {
    return {
        add: (item) => [].push(item),
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文