我想约束一个函数,使它接受一个对象作为参数,并返回一个完全相同形状的对象。该对象的键可以是任何字符串,我想告诉typescript,返回对象具有相同的键。即
interface ConstrainedObject {
[key: string]: string[];
}
function transformer(argument: ConstrainedObject): ConstrainedObject {
// ... code here
}
因此,这个函数可以接受一个键为 any string的对象,但它应该强制返回值具有相同的键。即
const result = transformer({
linda: ['1', '2', '3'],
jacob: ['4', '5', '6']
})
result.linda; // allowed, and intellisense should help here
result.jeremy // should error, as the object passed to transformer did not have this key
这在打字机上可能吗?
1条答案
按热度按时间flvlnr441#
当你给某个对象或Map类型加上
Record<string, string[]>
标签时,你就是在向编译器明确地说这个对象有一个松散的模式。别那么做然后,您可以将对象的推断类型与泛型约束组合:现在当你叫它
你可以引用
x.foo
并编译,自动完成等等。我们有一个类型T
,我们知道它与您设置的模式匹配,但编译器可以为T
推断出一个 * 更具体 * 的类型(在本例中为{ foo: string[] }
)。如果你想让
transform
更通用,你可以在泛型约束中用unknown
替换string[]
,它会更通用,尽管对于身份函数以外的任何东西,实现可能会变得棘手。