从类型内部动态继承类型?

问题描述 投票:0回答:1

我有以下类型示例

编译

interface Enforcer {
    name: string;
    keys: { [key: string]: number }
}
class Parent implements Enforcer {
    name = 'abc'
    keys = {
        a: 1,
        b: 2,
        c: 3,
        d: 4,
    }
}

const p = new Parent();

type Inherit<T extends Enforcer = Enforcer> = [T, (keyof T['keys'])[]];

const h: Inherit<Parent> = [p, ['']];

它工作得很好,它会在

h
的键数组上自动建议和出错,但我想让它动态化,而不需要做
const h: Inherit<Parent> = [p, ['']];
而只是
const h: Inherit = [p, ['']];
,因为
p
类型已经是清楚。

我也尝试过

type InheritK<T extends Enforcer = Enforcer, K extends keyof T['keys'] = keyof T['keys']> = [T, K[]];

const hk: InheritK = [p, ['']];

但没有出现自动建议和错误。

我知道我们可以使用

function
但我更希望我们可以在不需要函数调用的情况下做到这一点。

typescript typescript-generics
1个回答
0
投票

我想我在 stackoverflow 上看到过类似的问题。但是我无法找到可供参考的链接。但是,请尝试使用辅助函数进行初始化 - create

function create<T extends Enforcer>(instance: T, keys: (keyof T['keys'])[]): Inherit<T> {
    return [instance, keys];
}

const h = create(p, ['a', 'b']);

编译

© www.soinside.com 2019 - 2024. All rights reserved.