不要使用“object”作为类型。 “object”类型目前很难使用

2024-04-04

const useSetState = <T extends object>(
  initialState: T = {} as T
): [T, (patch: Partial<T> | ((prevState: T) => Partial<T>)) => void] => {
  const [state, setState] = useState<T>(initialState);
  const setMergeState = useCallback(
    (patch) => {
      setState((prevState) => ({
        ...prevState,
        ...(patch instanceof Function ? patch(prevState) : patch),
      }));
    },
    [setState]
  );

  return [state, setMergeState];
};

但我发现这个错误:不要使用object作为一种类型。这object类型目前很难使用(看到这个问题 https://github.com/microsoft/TypeScript/issues/21732).


对象类型几乎已被弃用,因为一切都是对象。对于对象,使用{}类型,它将允许任何属性。对于一切,使用any。但一切都是对象,所以主要的any属性(一切的类型)没有意义。所以 TypeScript 现在用来关闭类型检查。不要使用它。

所以一切都是对象,不要使用extends object。仅供使用T.


Why 一切都是对象? JavaScript(所以 TypeScript 也是如此)一直是一种面向对象的编程语言。例如,JS 与 Java 不同,因为它是基于原型的,而类 C 通常是基于类的。 TS/JS 中的每个值都继承自 Object 类,Java 和 C# 中也是如此。任何对象都有其值的属性"string"有 - 你可以使用"string".toUpperCase()。对于数字、类的对象也是如此(new XMLHttpReqeust)、静态类(Math),文字对象,因为没有属性 ({}.hasOwnProperty)、数组等等...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不要使用“object”作为类型。 “object”类型目前很难使用 的相关文章

随机推荐