Javascript 创建类似lodash的东西的最佳方法是在typescript中获取?
我试图找到创建lodashJavascript 创建类似lodash的东西的最佳方法是在typescript中获取?,javascript,typescript,lodash,Javascript,Typescript,Lodash,我试图找到创建lodashget()函数类型安全版本的最佳方法。 我做了研究,提出了一个get函数,它的工作原理是这样的(实际类型有点复杂): 但是我真的不喜欢“!”语法。感觉没有必要。 我已经找到了一些替代方法,尝试将给定对象转换为“全部可选”类型(部分),但当尝试将其转换回真实对象时,情况会变得糟糕,我不喜欢它 有没有办法摆脱“!”语法? 我甚至想过为typescript编写一个自定义规则,如果我们在get函数的上下文中,它将吞掉“Object is mayby'undefined.ts(2
get()
函数类型安全版本的最佳方法。
我做了研究,提出了一个get函数,它的工作原理是这样的(实际类型有点复杂):
但是我真的不喜欢“!”语法。感觉没有必要。
我已经找到了一些替代方法,尝试将给定对象转换为“全部可选”类型(部分),但当尝试将其转换回真实对象时,情况会变得糟糕,我不喜欢它
有没有办法摆脱“!”语法?
我甚至想过为typescript编写一个自定义规则,如果我们在get函数的上下文中,它将吞掉“Object is mayby'undefined.ts(2532)”错误,但我不知道typescript是否允许这种东西
有什么建议吗
编辑:对于那些对函数的完整声明感兴趣的人,我使用了函数重载来覆盖所有情况,所以看起来像这样:
get(() => a!.b!.c!.d, 'someDefaultValue');
export function get<Target>(getter: () => Target): Target | undefined;
export function get<Target>(getter: () => Target, defaultValue: Target): Target;
export function get(getter: () => any, defaultValue?: any): any {
try {
return getter();
} catch (e) {
return defaultValue;
}
}
导出函数get(getter:()=>Target):Target |未定义;
导出函数get(getter:()=>Target,defaultValue:Target):Target;
导出函数get(getter:()=>any,defaultValue?:any):any{
试一试{
返回getter();
}捕获(e){
返回默认值;
}
}
代码>不是类型安全的。请查看函数的实现。表达式被try/catch包围,因此在路径不存在的情况下不会出现异常。检查可选链接getter可能会失败,但不会在签名中反映它。IDK如何在Typescript中反映它;Haskell/Scala/Rust将使用可能
或选项
.9000,这只是实现的简化版本。真正的应用程序使用函数重载来捕获所有情况。
export function get<Target>(getter: () => Target): Target | undefined;
export function get<Target>(getter: () => Target, defaultValue: Target): Target;
export function get(getter: () => any, defaultValue?: any): any {
try {
return getter();
} catch (e) {
return defaultValue;
}
}