给出以下(显然是简化的)功能
C:\Python27\Lib\site-packages\win32com\client>python LateAndEarly.py
True
0
0
0
Traceback (most recent call last):
File "LateAndEarly.py", line 16, in <module>
cs.GetDataAngular()
File "C:\Python27\lib\site-packages\win32com\gen_py\35F923BD-6F0F-477D-A07C-E3
3C53FB692Bx0x3x0.py", line 415, in GetDataAngular
return self._ApplyTypes_(1610809374, 1, (12, 0), (), u'GetDataAngular', None
,)
File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 467, in
_ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'PRICS681', u'Su
bscript out of range', None, 1000009, -2146828279), None)
有没有办法在Typescript中正确表达这一点? 我尝试了大约一百万种东西,但无法正常工作。
添加无操作默认转换也可以使我正常工作。但是我总是以if($count == 0)
{
$output .= '<div class="carousel-item active">';
} else {
$output .= '<div class="carousel-item">';
}
结尾(假设T是转换和函数的返回类型)。
答案 0 :(得分:1)
您可以使用overloads或conditional types进行此操作。不同数量的参数似乎可以更好地处理重载,如下所示:
function maybeTransform(): "abc";
function maybeTransform<R>(transform: (arg: string)=>R): R;
function maybeTransform(transform?: (arg: string)=>any) {
const myString = "abc";
return transform ? transform(myString) : myString;
}
const x = maybeTransform(); // "abc"
const y = maybeTransform((x: string) => x.length); // number
您也可以尝试使用条件类型,但由于参数的undefined
-性质,它变得很时髦:
function maybeTransform<F extends undefined | ((arg: string) => any) = undefined>(
transform?: F
): F extends (arg: string) => infer R ? R : "abc" {
const myString = "abc";
return transform ? transform(myString) : myString;
}
const x = maybeTransform(); // "abc"
const y = maybeTransform((x: string) => x.length); // number
这两种方法都无法很好地处理其类型可能不确定的参数:
const whoKnows = Math.random()<0.5 ? undefined : ((x: string)=>x.length);
const xOrY = maybeTransform(whoKnows);
带有重载,它不会编译(type '((x: string) => number) | undefined' is not assignable to parameter of type '(arg: string) => number'
);如果使用条件类型,则会给出错误的结果类型(number
)。因此有一些警告。我想在这种情况下我更喜欢重载,因为我宁愿被阻止进行有效的调用然后被赋予无效的返回类型。
希望有所帮助;祝你好运!