Errors
Every message Backtick can show you, by who says it, with its fix.
Every message Backtick can show you, by who says it, with its fix. Your
editor and npm run typecheck report the first two groups; the third is
thrown by your server, per request, before anything reaches the phone; the
last by your app.
From TypeScript
Argument of type '…' is not assignable to parameter of type 'Spliceable'
The splice holds something that can't cross: a function, a class instance, a
Date. Splice what it's for instead: a Date as a string, a function as a
client function, cs`(n: number) => …`. See
what can cross.
Property '…' does not exist on type 'GlobalThis'
A script used a name from your server without a $. Splice it: $total,
not total. See splices.
This expression is not callable. Type 'Client<…>' has no call signatures
A hook, or another client value, was called in a server component. Hooks belong in a client component.
JSX element type '…' does not have any construct or call signatures
A client component was drawn as a tag on your server. Draw it in a script:
cs`<$Card />`. See
client components.
From the compiler
These are reported in the editor, and thrown when your server loads the file.
cs was not compiled. Is @backtickjs set up for this project?
Your server ran a script without the plugin that compiles them. Start it with
node --import @backtickjs/node-plugin, or on Bun preload
@backtickjs/bun-plugin. A new project's npm start already does. See
How it works.
A cs client script is one expression or one block
Statements need braces: cs`{ a(); b(); }`. See the
three shapes.
This ${…} is in text, not code, so it isn't spliced
A ${…} inside a string or a comment in a script is text to the phone. As an
element's child, write it in braces: {${…}}.
A cs client script can't hold a template literal
A script is a template literal itself, so \` can't start one inside it.
Build the string with +: n + "%", not `${n}%`. In a string or a
comment, \` is a backtick, and fine.
$-prefixed names are reserved for unbraced splices in a cs client script
A script declared a name starting with $, as const $label = …. Those are
splices; name it without the $.
Can't splice $name unbraced: a $-prefixed host binding splices with braces
A server variable whose own name starts with $, spliced as $$name. Write
${$name}.
A tag splices a host value by its name, e.g. <$Card>, not with ${…}
A tag was written as <${Card}>. Write <$Card>.
<View> is drawn by the client, so it belongs in a script
A React Native tag was drawn on your server, outside a script. Draw it in
one: cs`<$View>…</$View>`.
From the bundler
Thrown by bundler.build, for the screen it was building.
Can't import … from "…": the client provides …
A script uses a package missing from packageVersions. Add it there, at the
version the app is built with, and to the app's modules. See
the three places a package goes.
Can't import … from "…": it needs …, and the client provides …
The app was built with a version of the package outside the range in
createImport. Widen the range if the export works with that version, or
serve that app a screen that doesn't use it.
Can't splice the host function …: it's host code, and only runs on the host
A function reached a splice, perhaps through any. Write the phone's code as
a script, cs`(n: number) => …`. A server component is drawn with a tag
in a braced splice: {${<Reviews />}}.
Can't splice this … instance: only plain objects cross into a client script
A class instance reached a splice. Cross its data as a plain object,
{ title: todo.title }, or build it on the phone with a client function.
Can't splice a symbol
A symbol reached a splice, through any. Splice its key as a string, and
make the symbol in a script: cs`Symbol.for($key)`.
Can't splice a value that contains itself
A value refers back to itself, such as a tree whose nodes point at their parents. Splice a copy without the back references.
… is a client component, so it can't be a tag on the host
A client component, cs`(props) => …`, was drawn as a tag on your
server. Draw it in a script: cs`<$Card />`.
From your app
The bundle requires "…", which this app doesn't provide
The bundle uses a package missing from the modules your app hands to
evaluate. Add it, and install it in the app so its native code ships. If
your server shouldn't have sent it, check its packageVersions for this app.
See the three places a package goes.