You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正提取返回类型后的useStateError函数使其合法?

修复TypeScript中useStateError函数的类型问题

你遇到的问题核心是:提取的stateGetter和stateSetter是自带独立泛型的类型,它们的泛型T和useStateError函数的泛型T没有关联,导致TypeScript认为getter可以返回任意类型、setter可以接受任意类型,和实际返回的函数类型不匹配。

正确的修改方式

把类型定义改成依赖外部泛型参数的形式,让类型的泛型和函数的泛型绑定:

  1. 调整类型定义
// 让类型接收外部传入的泛型T,而非自身声明泛型
type StateGetter<T> = () => T;
type StateSetter<T> = (state: T) => void;
  1. 修改函数返回值类型
function useStateFixed<T>(initState: T): [StateGetter<T>, StateSetter<T>] {
  let _state = initState;
  return [
    (): T => { return _state },
    (state: T) => {
      _state = state;
    }
  ];
}

更简洁的写法(可选)

也可以直接定义一个包含泛型的元组类型,避免拆分两个类型:

type StateTuple<T> = [() => T, (state: T) => void];

function useStateFixed<T>(initState: T): StateTuple<T> {
  let _state = initState;
  return [
    (): T => { return _state },
    (state: T) => {
      _state = state;
    }
  ];
}

这样修改后,getter和setter的类型会严格和函数初始化时的T保持一致,和原useStateCorrect的类型逻辑完全等价,TypeScript就能通过类型检查了。

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:24:26