在我的应用程序中,我有一个Map
,它返回一组设置,将用户的角色作为一个键。
enum Role {
ROLE_1 = "role"
}
const settingsRole1 = {}
const defaultSettings = {}
const secondParameter = ""
const map = new Map<Role, any>([
[Role.ROLE_1, settingsRole1]
]);
const settings = map.get(Role.ROLE_1) ?? defaultSettings;
字符串
现在我想引入第二个参数。因为我想尽可能少地修改代码,所以我想将Map<Role, Settings>
转换为Map<Role, (secondParameter: string) => Settings>
,从Map中返回一个函数,稍后将调用该函数。
enum Role {
ROLE_1 = "role"
}
const settingsRole1 = {}
const defaultSettings = {}
const secondParameter = ""
const map = new Map<Role, (secondParameter: string) => any>([
[Role.ROLE_1, (secondParameter: string) => settingsRole1]
]);
const settings = map.get(Role.ROLE_1)(secondParameter) ?? defaultSettings;
型
我在尝试调用从map返回的函数时收到此错误:TS2722: Cannot invoke an object which is possibly 'undefined'
的值。
我试着保护它,但似乎不起作用...
enum Role {
ROLE_1 = "role"
}
const settings = {}
const defaultSettings = {}
const map = new Map<Role, (secondParameter: string) => any>([
[Role.ROLE_1, (secondParameter: string) => settings]
]);
const settings = map.has(Role.ROLE_1) ? map.get(Role.ROLE_1)(secondParameter) : defaultSettings;
型
我不知道如何使警卫工作,无论如何,我会考虑尝试其他方法,如果你想建议一个
2条答案
按热度按时间vmdwslir1#
可以对第一个参数使用可选的链接
?.
字符串
tgabmvqs2#
在表达式后使用
!
来告诉编译器忽略它的可空性。在您的情况下,它应该是(与显式密钥检查)字符串
另一种方法是使用可选的链接
?.
运算符型
但在语义上略有不同-它不区分缺少的键和具有显式
null
/undefined
值的键。