创建仅使用字符串键扩展接口的TypeScript通用类型

时间:2019-09-23 21:24:37

标签: typescript

我想创建一个通用类,该类需要一个模板参数,该模板参数是仅包含字符串键的接口。

我以为我可以做类似的事情

class MyClass<T extends Record<string, object>> {
    sendEventData<TKey extends keyof T>(event: TKey, data: T[TKey]) {
        // ...
    }
}

但是,如果我将其实例化

interface MyEvents {
    someEvent: { foo: string }
}

const instanace = new MyClass<MyEvents>();

我收到编译错误:

Type 'MyEvents' does not satisfy the constraint 'Record<string, object>'.
  Index signature is missing in type 'MyEvents'.

如果我完全删除extends Record<string, object,它可以很好地编译,但是它不限于字符串=>对象的映射。

1 个答案:

答案 0 :(得分:4)

Don't enforce In Session Certificate表示它接受您不需要的任何密钥。

相反,编写Record<string, >以将其限制为仅存在于类型上并且也是字符串的键。

Demo