我的问题是
我想通过做keyof Type1
来获取一个接口的键,问题是Type1
被Type2
扩展了,里面包含了[key: string]: SetOfValueTypes;
,所以keyof Type1
在没有重新定义类型的情况下是无用的。我仍然想保留SetOfValueTypes
检查。所以我想保留Type1
的当前定义,但只需要Type1
的键类型,而不需要Type2
。
整个事情看起来有点像这样(这与我的接口不匹配,只是一个简化的表示):
// Initial base type
interface Type2 {
[key: string]: SetOfValueTypes;
}
// New type that extends Type2 to make sure values are one of possible types
interface Type1 extends Type2 {
email: string;
phone: number;
}
// Extracting keys from Type1
type KeysOfType1 = keyof Type1;
// The key can be any string, because of [key: string] definition in Type2
const someKey: KeysOfType1 = 'can be anything';
我猜这是不可能的,因为'email'
和'phone'
文字类型是string
类型的子集,但我真的希望有一种方法不需要重新定义Type1
,因为Type1
在我的情况下相当大。
1条答案
按热度按时间2vuwiymt1#
您可以使用以下类型实现所需的结果。
基本上,
email
和phone
是string,
的子集,反之亦然。因此,检查string extends "phone"
或string extends "email"
是不正确的。