例如,我有一个对象:
const obj = {
a: (valueA: string) => true;
b: (valueB: string) => false;
c: (valueC: string) => false;
};
您可以看到该对象中的所有属性都具有相同的类型((value: string) => boolean
(。现在我希望它有IntelliSense,这使得以下成为可能:
- 键入
obj.
后显示a
、b
、c
- 当我尝试将属性添加到
obj
中时,请限制其类型
我尝试了索引器:
const obj: Record<string, ((value: string) => boolean)> = {
a: (valueA: string) => true;
b: (valueB: string) => false;
c: (valueC: string) => false;
};
但现在目标1不会实现,如果我不使用索引器,我就无法实现目标2。
变量推理要么全有要么全无,要么让typescript推断类型,要么自己指定类型。
你只能通过一个助手功能来做到这一点:
function makeFunctionsMap<T extends Record<string, ((value: string) => boolean)>>(o: T) { return o; }
const obj = makeFunctionsMap({
a: (valueA: string) => true,
b: (valueB: string) => false,
c: (valueC: string) => false,
})
obj.a;
obj.d // Error
游乐场链接
如果你想让它更短、更不可读,你也可以内联这个函数(Playground Link(