首页 > 解决方案 > 用于推断递归类型的打字稿提示?

问题描述

我正在尝试编写一个具有递归函数的库:

const generateTreeNode = () => {
  return {
    value: 1,
    // ...other properties...
    next: generateTreeNode
  };
}

如果没有任何附加信息,打字稿将无法推断出递归:

declare const generateTreeNode: () => {
    value: number;
    next: any;
};

我知道如果我指定它,我可以让编译器正确识别类型:

type TGenerateTreeNode = () => {
  value: number,
  next: TGenerateTreeNode
};

const generateTreeNode: TGenerateTreeNode = () => {
  return {
    value: 1,
    // ...other properties...
    next: generateTreeNode
  };
}

我想知道的是,是否有任何提示给编译器类型定义递归的地方,而不必指定其他(非递归)属性(例如value)。理想情况下,类似:

type TGenerateTreeNode<TOther extends {[key: string]: any}> = () => {
  next: TGenerateTreeNode<TOther>
} & TOther;

// This errors without a defintion for the generic on TGenerateTreeNode
const generateTreeNode: TGenerateTreeNode = () => {
  return {
    value: 1,
    // ...other properties...
    next: generateTreeNode
  };
}

标签: typescript

解决方案


推荐阅读