Template Strings Require derive()
BROKEN (fails to compile)
{`// This code fails at compile time:
const summaries = articles.map((article) => ({
summary: generateObject({
prompt: \`Title: \${article.title}\\nContent: \${article.content}\`,
}),
}));
// Error: "Tried to directly access an opaque value"`}
JavaScript evaluates ${`{article.title}`}{" "}
immediately, but article{" "}
is an OpaqueRef that requires reactive context.
WORKING (this pattern)
{`// This code works:
const summaries = articles.map((article) => ({
summary: generateObject({
prompt: derive(article, (a) =>
\`Title: \${a.title}\\nContent: \${a.content}\`
),
}),
}));`}
derive(){" "}
defers template evaluation until reactive context is established.
Live Results (using derive() approach):
{summaries.map((item, idx) => (-
{summaryResult.mainPoints.map((
point: string,
i: number,
) =>
- {point} )}
Why derive() Is Needed:
- JavaScript evaluates template strings immediately
-
`${article.title}`{" "} tries to access the property NOW -
But
article{" "} is an OpaqueRef requiring reactive tracking -
derive(){" "} defers evaluation until reactive context exists