首页 > 解决方案 > 如何递归解析类型?

问题描述

以下类型定义存在一些问题。

type Check<T> = (value: any) => value is T;

type Static<T> = T extends Check<infer U> ? U : never;

type Interface<T extends { [index: string]: Check<any> }> = Check<{ [P in keyof T]: Static<T[P]> }>;

type IPlayer = Static<
    Interface<{
        name: Check<string>;
        data: Interface<{
            score: Check<number>;
        }>;
    }>
>;

使用 TypeScript 3.1.1,如果我将鼠标悬停IPlayer在 VS Code 中,它会将类型解析为:

type IPlayer = {
    name: string;
    data: any;
}

但是,我希望它解决:

type IPlayer = {
    name: string;
    data: {
        score: number;
    };
}

如何更改我的类型定义以使其正常工作?

标签: typescript

解决方案


推荐阅读