typescript - 在打字稿中,我不明白为什么会收到错误“Service1 | 服务2 | null' 不可分配给类型 '(Service1 & Service2) | 无效的'
问题描述
我正在尝试为一个简单的个人应用程序创建一个“婴儿”IoC 容器。我试图用这段代码实现的是根据作为第一个参数传递的键service
在方法中为参数定义一个类型registerService
但我得到了错误
Type 'Service1 | Service2 | null' is not assignable to type '(Service1 & Service2) | null'.
Type 'Service1' is not assignable to type 'Service1 & Service2'.
Property 'thing2' is missing in type 'Service1' but required in type 'Service2'.
我的代码:
export const SERVICE_ONE_KEY = 'service1'
export const SERVICE_TWO_KEY = 'service2'
type Service1 = {
thing1: () => void
}
type Service2 = {
thing2: () => void
}
type IocKeys = typeof SERVICE_ONE_KEY | typeof SERVICE_TWO_KEY
type Services = {
[SERVICE_ONE_KEY]: Service1 | null
[SERVICE_TWO_KEY]: Service2 | null
}
const registry: Services = {
service1: null,
service2: null
}
export const registerService = (name: IocKeys, service: Services[typeof name]): Services[typeof name] => {
registry[name] = service // Error here
return registry[name]
}
export const getService = (name: IocKeys): Services[typeof name] => {
return registry[name]
}
可以在这里尝试一个“工作”示例来了解什么是错的!
更新 1
我还想根据getService
方法中的名称参数键定义返回类型
解决方案
推荐阅读
- javascript - 多个属性的组合作为节点标签
- python - 如何通过 gremlin-python 获取所有边、关联顶点以及各自的 id、标签和属性?
- c++ - 如何让 OpenGL 在检测到的标记上绘图?
- c# - 在文本框创建的网格中计算用户输入值的范围(未指定的数量)
- bash - 如何将带有空格的目录作为参数传递给函数?
- tensorflow - 使用 fit_generator 的基本 RNN 训练不会输出预期的形状
- flutter - Flutter 无法将 CameraPreview 小部件设置为匹配屏幕尺寸
- sql-server - 如何跳过错误并继续运行 SQL 查询?
- python-3.x - 读取 pem 证书期间 python 3.6 出现 x509 错误
- extjs - 如何在 Extjs 的组合框中传递树存储