TL; DR;我的formatAPI
函数非常不 TYPEScript覆盖函数的方式......
我有一个可以在JavaScript中使用以下四种方式之一的函数:
jsf.format("format", function(){ return ... }); // string, function
jsf.format("format"); // string
jsf.format({
"format1": function(){ return ... },
"format2": function(){ return ... }
}); // map[string:function]
jsf.format(); // no params
每个签名在下面执行不同的逻辑。我已经得到了以下内容:
function formatAPI(name: string, callback?: Function): any {
if (callback) {
registry.register(name, callback);
} else if (typeof name === 'object') {
registry.registerMany(name);
} else if (name) {
return registry.get(name);
} else {
return registry.list();
}
}
但它不一致 - 例如第二个参数是string
。当我将其更改为string|Object
而不是我的逻辑失败时(registry.register(name, callback);
- name
此处必须是字符串且string|Object
不能分配给字符串)。我正在尝试找到一个清晰且可扩展的解决方案(如果我需要,可以在将来添加更多变体),我尝试调整another question但我失败了。
我很感激帮助和/或建议如何为此功能和功能体声明所有可能的签名。
答案 0 :(得分:3)
切片!它骰子!它吐司!
string
有一点需要注意的是,编译器并没有使用签名来推断类型保护的行为。这意味着您应该稍微保守地构建代码 - 在这里,我将两个typeof
个案都放在<input type="text" name="feature[]['<?php echo $row['idlang']?>']" >
<input type="text" name="val[]">
检查中。