我有以下类型示例
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
但我更希望我们可以在不需要函数调用的情况下做到这一点。
我想我在 stackoverflow 上看到过类似的问题。但是我无法找到可供参考的链接。但是,请尝试使用辅助函数进行初始化 - create
function create<T extends Enforcer>(instance: T, keys: (keyof T['keys'])[]): Inherit<T> {
return [instance, keys];
}
const h = create(p, ['a', 'b']);