Я не понимаю конструкцию языка
В данный момент я прохожу туториал по next js. В одном из файлов мне встретилось следующее:
import { sql } from '@vercel/postgres';
/* какой-то код */
export async function fetchRevenue() {
try {
/* какой-то код */
const data = await sql<Revenue>`SELECT * FROM revenue`;
/* какой-то код */
} catch (error) {
/* какой-то код */
}
}
Определение sql примерно следующее:
declare const sql: VercelPool & (<O extends QueryResultRow>(strings: TemplateStringsArray, ...values: Primitive[]) => Promise<QueryResult<O>>);
Кто-нибудь объясните пожалуйста вот это действие:
await sql<Revenue>`SELECT * FROM revenue`;
почему после sql стоит строка в обратных кавычках
Ответы (1 шт):
Автор решения: Qwertiy
→ Ссылка
Это обычная асинхронная теггирующая функция. Как f2
или f3
, только ещё от тайпскрипта generic-параметр добавился между ней и строкой.
~async function() {
function f1(strs, ...vals) {
return strs[0]
}
console.log(f1 `abc`)
function f2(strs, ...vals) {
return new Promise(resolve => setTimeout(resolve, 1000, strs[0]))
}
console.log(await f2 `def`)
async function f3(strs, ...vals) {
await new Promise(resolve => setTimeout(resolve, 1000))
return strs[0]
}
console.log(await f3 `hij`)
}()