tsx中写泛型报语法错误?

张巨侠
  • 334

image.png

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

}

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

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

image.png

回复
阅读 325
1 个回答
✓ 已被采纳
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),
    }
}
你知道吗?

宣传栏