typescript - 缩小类型
问题描述
我正在尝试实现满足一种类型的东西,但该类型的更具体的版本。
type A = 'number' | 'string'
type B = {
[prop: string]: (
input: { [key: string]: A },
) => number
}
const test: B = {
prop: (input: { a: string, b: string }) => 0
}
这会产生错误:
Type '{ [key: string]: A; }' is missing the following properties from type '{ a: string; b: string; }': a, b
但我认为它应该编译,因为{ a: string, b: string }
满足约束{ [key: string]: A; }
。
我怎样才能做到这一点?
解决方案
在您的示例中,它无法编译,因为a: string, b: string
不符合初始类型{ [key: string]: A }
。
除非您也告诉它(强制使用强制转换),否则 Angular无法知道这a
是 astring
而不是 a 。number
我会更改您的代码并使用模板来定义input
.
喜欢 :
type B<T extends {
[key: string]: unknown;
} = any> = {
prop: (
input: {
[key in keyof T]: T[key];
},
) => number;
}
type C = {
a: string;
b: string;
};
const test: B<C> = {
prop: (input) => {
return 0;
},
};
推荐阅读
- java - Java8 对 Map 中的 Map 值进行排序
- java - 无法从 FireBase 下载图像
- java - 使用 ResultSet 的方法 first() 时出现“Feature not supported”错误
- java - 即使我的用户已经订阅(沙盒),iap.subscribe(Skus[]) 机制也会返回 false
- python - 合并/组合单列中的重复项而不会丢失其他列中的数据
- c# - 基于登录用户我想隐藏或显示一些动作视图
- angular - 如何从Angular中的一组输入字段中禁用输入字段
- c# - What does .ToUniversalTime() really do on a DateTime instance (C#)?
- swiftui - 拖放列表以在 SwiftUI 上重新排序
- c# - 消费者的 CQRS 预测不是为 API 组合架构设计的吗?