首页 > 解决方案 > Typescript - 具有通用属性的自我引用

问题描述

是否有可能有这样的自引用类型表示?

export type SelfReferenced {
    prop: string;
    [x: string]: SelfReferenced;
}

这意味着除了prop字段 Ex 之外,所有键都将是 this 的引用:

const $deep: SelfReference = createProxy();
let lastReference = $deep.a.very.long.nested.deep; //type: SelfReference
lastReference.prop //type: string

附加要求是在以下位置使用泛型类型参数prop

export type SelfReferenced<T> {
    prop: () => T;
    [x: string]: SelfReferenced<T>;
}

标签: typescripttypescript-typings

解决方案


可以用交集来表示:

type SelfReferenced = {
    prop: string;
} & { [x: string]: SelfReferenced; }

操场


更新:使用泛型的自引用递归类型的解决方法:

interface _SelfReferenced<T> { [x: string]: SelfReferenced<T>; }
type SelfReferenced<T> = _SelfReferenced<T> & { prop: () => T }

操场


推荐阅读