Computed Property Names
March 24, 2026 ยท View on GitHub
BrighterScript supports using computed property names for associative array keys via the [expr] bracket syntax, similar to computed property names in JavaScript.
The expression inside the brackets must resolve to a string at compile-time. Currently only enum members (string enums), constants, and string literals are supported.
Note
Currently runtime values, such as variables, are not supported
Enum members
String enum members can be used as computed keys. The enum value is inlined at compile-time.
enum ApiPath
login = "/login"
logout = "/logout"
profile = "/profile"
end enum
sub main()
handlers = {
[ApiPath.login]: loginHandler,
[ApiPath.logout]: logoutHandler,
[ApiPath.profile]: profileHandler
}
end sub
View the transpiled BrightScript code
sub main()
handlers = {
"/login": loginHandler
"/logout": logoutHandler
"/profile": profileHandler
}
end sub
Namespaced enums work the same way:
namespace Api
enum Path
login = "/login"
profile = "/profile"
end enum
end namespace
sub main()
handlers = {
[Api.Path.login]: loginHandler,
[Api.Path.profile]: profileHandler
}
end sub
Constants
String constants can also be used as computed keys.
const KEY_NAME = "displayName"
const KEY_AGE = "displayAge"
sub main()
labels = {
[KEY_NAME]: "Name",
[KEY_AGE]: "Age"
}
end sub
View the transpiled BrightScript code
sub main()
labels = {
"displayName": "Name"
"displayAge": "Age"
}
end sub
Namespaced constants work as well:
namespace Config
const PRIMARY_COLOR = "primaryColor"
const SECONDARY_COLOR = "secondaryColor"
end namespace
sub main()
theme = {
[Config.PRIMARY_COLOR]: "#ff0000",
[Config.SECONDARY_COLOR]: "#0000ff"
}
end sub
Mixing computed and regular keys
Computed and regular keys can be freely mixed in the same associative array.
enum Field
title = "title"
end enum
sub main()
data = {
id: 1,
[Field.title]: "Hello World",
["some-meta"]: true
}
end sub
View the transpiled BrightScript code
sub main()
data = {
id: 1
"title": "Hello World"
"some-meta": true
}
end sub
String literals
The most basic use case is a string literal in brackets.
sub main()
headers = {
["Content-Type"]: "application/json",
["X-Api-Key"]: "abc123"
}
end sub
View the transpiled BrightScript code
sub main()
headers = {
"Content-Type": "application/json"
"X-Api-Key": "abc123"
}
end sub
Restrictions
Only string values are allowed
The expression must resolve to a string value. Numeric enum members and numeric constants are compile-time errors.
enum Direction
up ' integer (value: 0)
down
end enum
const TIMEOUT = 30
sub main()
m.data = {
[Direction.up]: "value", ' error: computed AA keys must resolve to a string value
[TIMEOUT]: "value" ' error: computed AA keys must resolve to a string value
}
end sub
Only compile-time constants are allowed
The expression must be resolvable at compile-time. Runtime variables are not allowed.
sub main()
key = "someKey"
m.data = {
[key]: "value" ' error: computed property keys must be a compile-time constant
}
end sub