在Typescript 1.8.9中
鉴于
type templateUrlFunction = (locale?:string) => string;
type templateUrlParameter = string | templateUrlFunction;
private _templateUrl:templateUrlParameter;
为什么我必须转换_templateUrl,即使我正在使用控制流进行类型保护:
let templateUrl:string;
if (typeof this._templateUrl === 'function') {
templateUrl = (<templateUrlFunction>this._templateUrl)($translate.use());
} else if (typeof this._templateUrl === 'string') {
templateUrl = <string>this._templateUrl;
}
我见过的类型防护示例不需要施法。如果我不投,我得到错误:
转化为2349 Cannot invoke an expression whose type lacks a call signature.
<templateUrlFunction>
答案 0 :(得分:1)
因为类型保护不适用于TS中的属性&lt; 2.0。
一种可能的解决方法是首先将其置于变量中:
<button hidden id="sign-up-float-icon" class="floater mdl-button mdl-js-button mdl-button--icon">
<i class="material-icons">more_vert</i>
</button>
<ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect" for="sign-up-float-icon">
<li class="mdl-menu__item" id="sign-up-email">
Register with Email
</li>
<li class="mdl-menu__item" id="sign-in-google">
Login with Google
</li>
</ul>