5

I am using typescript to write a vs code extension and for some reason I am unable to get the current line.

The function I am trying to make is:

function makeFrame()
{
    vscode.window.activeTextEditor.selection.active.line;
}

Which fails with error: Object is possibly undefined The import statement is:

import {window, commands, Disposable, ExtensionContext, StatusBarAlignment, StatusBarItem, TextDocument} from 'vscode';

What am I doing wrong?

(I am both new to TypeScript and writing extensions for VS code)

Gama11
  • 31,714
  • 9
  • 78
  • 100
Makogan
  • 8,208
  • 7
  • 44
  • 112

2 Answers2

11

activeTextEditor may be undefined. This indicates that there is no active editor and will happen for example when you first open a new workspace or when you close all editors

To fix, just add a quick check:

function makeFrame()
{
    const activeEditor = vscode.window.activeTextEditor;
    if (activeEditor) {
        activeEditor.selection.active.line;
    }
}
Matt Bierner
  • 58,117
  • 21
  • 175
  • 206
3

Object is possibly undefined

Because there may or may not be an activeEditor.

You can do an explicit check:

function makeFrame() {
    const activeEditor = vscode.window.activeTextEditor;
    if (activeEditor != null) {
        activeEditor.selection.active.line;
    }
}

Or an assertion if you are sure:

function makeFrame()
{
    vscode.window.activeTextEditor!.selection.active.line;
}
basarat
  • 261,912
  • 58
  • 460
  • 511