You can do it without strict typing.
class_name MyType
enum {
ONE,
TWO,
}
class_name Stuff extends Node
@export var my_type = MyType.ONE
But you cannot declare my_type as MyType. You can declare it as an int, which is all Enums are under the hood:
class_name Stuff extends Node
@export var my_type: int = MyType.ONE
Ultimately, you are trying to do something that Godot doesn’t really have support for. The next problem you’re going to run into is you can’t select your type from a dropdown in the inspector.

It’s even worse if you don’t type it as an int:
But once you embrace it, and do something like:
class_name MyType
enum Type {
ONE,
TWO,
}
class_name Stuff extends Node
@export var my_type: MyType.Type = MyType.Type.ONE
It doesn’t look so bad in the inspector:
Plus you can then do custom tooltips to make it even easier to read in the Inspector.
class_name MyType
enum Type {
## My first type.
ONE,
## The second type I made.
TWO,
}
Alternately, if you REALLY want short names, you can do something like this:
class_name MyType
const ONE = 1
const TWO = 2
class_name Stuff extends Node
@export var my_type: int = MyType.ONE
But you’re back to a poorer display in the Inspector:
Finally, you can use C#, GDExtension with C++ or roll your own version of the Godot engine and add your Enum in.
So there’s lots of workarounds. I don’t recommend using any. I understand why you want to, but after a while you get used to the way GDScript and Godot do things and you’ll appreciate the benefits.