Классы в Javascript - это просто обертки вокруг функций.
Вот самый простой TreeDataProvider, написанный как функция:
export default function MyAwesomeProvider(): vscode.TreeDataProvider<{}> {
// do some stuff if you wish
return {
getTreeItem,
getChildren,
onDidChangeTreeData,
}
}
В соответствии с интерфейсом, для возвращаемого объекта требуются только getTreeItem
и getChildren
.
Вот пример этих функций:
async function getChildren(element?: MyCustomType): Promise<MyCustomType[]> {
const children = element
? await getSubListOfElement(element)
: await getParentList()
return children
}
function getTreeItem(item: MyCustomType): vscode.TreeItem {
return {
id: `${item.id}`,
collapsibleState: void 0,
label: `${item.name}`,
tooltip: `${item.description}`,
iconPath: vscode.Uri.parse(item.avatarUrl),
}
}
Итак, я не знаю о вас, но мне кажется, что расширить его гораздо проще, чем возиться с псевдо-классами и этим ООП-материалом.
Например, вы можете создать функцию более высокого порядка, чтобы обернуть ее вокруг MyAwesomeProvider
, или просто сделать что-нибудь еще в этих функциях и поработать с ней.Обратите внимание, что вы также можете просто добавить больше свойств к объекту, который возвращает ваш провайдер, но Typescript будет жаловаться на то, что он больше не соответствует интерфейсу.
Есть что-то, что нужно сказать, чтобы игнорировать типы и просто делать это хорошостарый способ JS (хотя никогда не меньше, чем ES6, в конце концов, мы не дикари).