0

keyof当我有一个带有索引签名的接口时,我对如何工作感到有些困惑。

例如,如果我有一个如下界面:

interface InterfaceOne {
  [id: string]: InterfaceOne[keyof InterfaceOne];
  a: SomeTypeOne;
  b: SomeTypeTwo;
}

我想要一个函数,它的参数只能是 的有效属性InterfaceOne,例如:

function test = (param: keyof InterfaceOne) => any

在上面的函数中,我应该能够调用test('a')or test('b'),但是test('c')应该会导致编译错误,因为cis 不是InterfaceOne.

当我有索引签名时,这似乎不起作用InterfaceOne

type myType = keyof InterfaceOne返回string | number。如果我删除索引签名,它会"a" | "b"按预期返回。

有人可以解释为什么添加索引签名会改变返回的类型keyof吗?另外,我可以强制参数是属性名称的正确方法是InterfaceOne什么?

4

0 回答 0