我有一个返回字符串或数字的函数。我希望typescript根据我的if语句自动确定返回的值。我怎么能这样做?
function isString(value): boolean {
return typeof value === 'string';
}
function something(val) : string | number {
if (isString(val)) {
return 'string';
}
return 1;
}
const v = something(1);
v type是string | number
,我希望在这种情况下它是一个数字。
答案 0 :(得分:2)
您可以使用重载方法定义。当您提供多个方法签名时,最后一个是实际实现,TypeScript将隐藏其签名。
function something(val: string): string;
function something(val: any): number;
function something(val: any): string | number {
if (isString(val)) {
return 'string';
}
return 1;
}
答案 1 :(得分:0)
正如您所做的那样...请参阅以下TypeScript:
class Test {
isString (value: any): boolean {
return typeof value === 'string'
}
something (val: any): string | number {
if (this.isString(val)) {
return 'string'
}
return 1
}
}
let test = new Test()
console.log(typeof test.something("A"))
console.log(typeof test.something(1))
它编译成如下:
var Test = /** @class */ (function () {
function Test() {
}
Test.prototype.isString = function (value) {
return typeof value === 'string';
};
Test.prototype.something = function (val) {
if (this.isString(val)) {
return 'string';
}
return 1;
};
return Test;
}());
var test = new Test();
console.log(typeof test.something("A"));
console.log(typeof test.something(1));
如果您运行它...您可以看到它按预期返回string
或number
。
我希望它可以帮助你,再见。