TypeScript泛型函数中EntityType['id']索引报错的解决方法
问题解决方法
报错原因
第二个函数的泛型EntityType仅设置了默认值为Q,但TypeScript允许传入任何类型作为EntityType参数——哪怕这个类型没有id属性。因此TypeScript无法保证EntityType一定包含id键,就会抛出Type 'id' cannot be used to index type 'EntityType'的错误。
解决方案
给泛型EntityType添加类型约束,强制要求它必须包含id属性。根据你的场景(Q的id是number类型),可以这样修改:
async function c<EntityType extends { id: number } = Q>(ids: EntityType["id"][]) { }
如果未来id的类型可能扩展(比如新增id为string的类),也可以用更灵活的约束:
async function c<EntityType extends { id: unknown } = Q>(ids: EntityType["id"][]) { }
效果验证
修改后:
- 默认调用时,
ids的hover提示会正确显示为(parameter) ids: number[],和第一个函数的预期一致; - 当传入符合约束的自定义类型时(比如
{ id: string }),ids的类型会自动推导为string[],保持类型安全。
内容的提问来源于stack exchange,提问作者sev
相关产品推荐
相关产品推荐

