Typescript 我可以在块范围中键入强制转换变量吗?

Typescript 我可以在块范围中键入强制转换变量吗?,typescript,Typescript,我有以下代码: function foo(input: Blob): void; function foo(input: string): void; function foo(input: any) { if (typeof input === "string") { } else if (input instanceof Blob) { } } 在这里,我想在块范围中键入castinput,而不是将其重新分配给另一个变量 if (typeof in

我有以下代码:

function foo(input: Blob): void;
function foo(input: string): void;
function foo(input: any) {
    if (typeof input === "string") {

    }   
    else if (input instanceof Blob) {

    }
}
在这里,我想在块范围中键入cast
input
,而不是将其重新分配给另一个变量

if (typeof input === "string") {
    declare input: string;
}   
else if (input instanceof Blob) {
    declare input: Blob;
}
而不是:

if (typeof input === "string") {
    var str: string = input;
}   
else if (input instanceof Blob) {
    var blob: Blob = input;
}

这在TypeScript中可能吗?

不可能。您需要具有不同类型的新变量名。

我认为最新版本的TypeScript会自动执行此操作。但是您必须将if语句与
typeof
instanceof
或特殊函数一起使用

function foo(input: string|blob|whatever) {
    if(typeof input === 'string') {
        // input is now a string
        input.blobfunction(); // Error: blobfunction() is not a method of string
    } else if(input instanceof blob) {
        // input is now a blob
    } else if(isWhatever(input)) {
        // input is now a whatever
    }
}

// Probably a good idea to make this a static 'whatever.isInstance()'
function isWhatever(input: string|blob|whatever): input is whatever {
    return true; // put your test for whatever here
}

请参阅:

这绝对是可能的@Walter的回答是正确的,instanceof按照OP的原始问题的意图工作