Skip to content

In finally block, local variable is incorrectly typed as never with return in try block. #28153

Closed
@OpenSourceAries

Description

@OpenSourceAries

TypeScript Version: 3.1.3

Search Terms: try finally block

Code

async function test(): Promise<string> {
    let browser: puppeteer.Browser | undefined = undefined;
    let page: puppeteer.Page | undefined = undefined;
    try {
        browser = await test1();
        page = await test2(browser);
        return await page.content();;
    } finally {
        if (page) {
            await page.close();
        }

        if (browser) {
            await browser.close();
        }
    }
}

async function test1(): Promise<puppeteer.Browser> {
    return await puppeteer.launch();
}

async function test2(browser: puppeteer.Browser): Promise<puppeteer.Page> {
    return await browser.newPage();
}

Expected behavior:
page and browser can be of type puppeteer.Page and puppeteer.Browser

Actual behavior:
compile error message:
error TS2339: Property 'close' does not exist on type 'never'.

Related Issues:
#11665(The different is current issue's code contains a return in try block)

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptDomain: Control FlowThe issue relates to control flow analysis

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions