40 lines
841 B
Markdown
40 lines
841 B
Markdown
|
---
|
||
|
title: "JavaScript error \"Super Expression must either be null or a function\""
|
||
|
date: 2022-04-18T04:05:40-04:00
|
||
|
draft: true
|
||
|
toc: false
|
||
|
images:
|
||
|
tags:
|
||
|
- dev
|
||
|
- javascript
|
||
|
- typescript
|
||
|
---
|
||
|
|
||
|
I just got this error when working on some TypeScript code.
|
||
|
|
||
|
```
|
||
|
Uncaught TypeError: Super Expression must either be null or a function
|
||
|
```
|
||
|
|
||
|
The line for the error pointed to the constructor of a class. What's happening?
|
||
|
Circular dependencies it turns out.
|
||
|
|
||
|
```ts
|
||
|
// in foo.ts
|
||
|
class Foo {
|
||
|
foo() {
|
||
|
new Bar().doSomething();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// in bar.ts
|
||
|
class Bar extends Foo {
|
||
|
// ...
|
||
|
}
|
||
|
```
|
||
|
|
||
|
It's obvious when boiled down like this, but it's something you'll want to make
|
||
|
sure to avoid. I solved this issue by making `Bar` not extend `Foo`. It added
|
||
|
little to no duplicated code for me in this case, so just separating the classes
|
||
|
was easy enough.
|