paths
в tsconfig
- это чисто справочная информация для подсветки, добавленная из расчёта, что вы уже используете какой-то сборщик который такие пути умеет. type Returns<T extends readonly Function[]> = {
-readonly [K in keyof T]: T[K] extends (...args: any[]) => PromiseLike<infer R> ? R : never;
};
type Arguments<T extends readonly Function[]> = {
[K in keyof T]?: T[K] extends (args: infer R, ...a: any[]) => any ? R : never;
};
function fetchAll<T extends readonly Function[]>(functions: readonly [...T], data?: Arguments<T>): Promise<Returns<T>> {
return Promise.all(
functions.map((func, index) => func(data?.[index]))
) as Promise<Returns<T>>;
}
const x = fetchAll([
(a:66) => Promise.resolve(42),
(f:string) => Promise.resolve('hello'),
() => Promise.resolve(true),
], [66, '1ff']);
const arr = [
(a:66) => Promise.resolve(42),
(f:string) => Promise.resolve('hello'),
() => Promise.resolve(true),
] as const;
const x = fetchAll(arr, [66, '1ff']);
next-auth
.skipLibCheck
в tsconfig
. typecript
, или старую версию модуля, или случайно подключаешь несколько версий модуля одновременно, или ещё много куда менее вероятных вариантов. (item: LinkItem) => void
, а требуется (data: MobileMegaMenuItem | LinkItem) => void,
, т.е. функция которая умеет работать и с тем и с тем. Подразумевается что onClick как раз не умеет и может привести к ошибке, потому и не даёт. export const useOpenMenuByHash = <Data extends MobileMegaMenuItem | LinkItem>(
data: Data[],
action: (data: Data) => void,
actionRoom?: () => void
) => {
//...
};
useOpenMenuByHash(data, onClick); // ok
useOpenMenuByHash(data, onClick as (d: LinkItem | MobileMegaMenuItem) => void);
conslole.log
у тебя в русской "c", о чём намекает даже подсветка тут.npm run
съедает параметр --env
, т.к. считает его своим, чтоб передавать аргументы в скрипт надо использовать разделитель --
: npm run build -- --env mode=development
. If you prefer a plain HTML setup without any build steps, you can use this JSFiddle as your starting point.
<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
}
}
</script>
<div id="app">{{ message }}</div>
<script type="module">
import { createApp } from 'vue'
createApp({
data() {
return {
message: 'Hello Vue!'
}
}
}).mount('#app')
</script>
<SomeComponent :someProp=""val"/>
<some-component :some-prop=""val"></some-component>
Почему? Птому что 1 - html регистронезависимый и SomeComponent
читается как somecomponent
, а vue такого не знает, 2 - список тэгов которые могут самозакрываться ограничен. font-display
. function lazyAsync(lib) {
let promise;
return async function (...args) {
promise ??= lib();
return (await promise).call(this, ...args);
};
}
const doSomething = lazyAsync(async () => {
// тут загружаем
const doSomething = await loadLib('doSomething');
// тут что-то делаем с загруженным
// тут возвращаем конечную функцию
return data => {
// тут делаем с аргументами
return doSomething.process(imgData);
};
});
// если сразу загружается нужная функция - можно не усложнять
const doSomething = lazyAsync(loadDoSomethingProcess);
await doSomething(1);
await doSomething(2);
await doSomething(3);
function popupLibraryOpen() {
isLibraryOpen.value = true
}
<MyButton @click="popupLibraryOpen">Библиотека игр</MyButton>
<MyButton @click="isLibraryOpen = true">Библиотека игр</MyButton>
function removeSomeShit(arr) {
const table = {};
const result = [];
for(const current of arr) {
const {uid, owner, createdAt} = current;
const uidOvnerKey = `${uid}\0${owner}`;
const ownerUidKey = `${owner}\0${uid}`;
const matched = table[uidOvnerKey];
if (matched) {
delete table[uidOvnerKey];
result.push(matched.createdAt > createdAt ? matched : current);
} else {
table[ownerUidKey] = current;
}
};
return Object.values(table).concat(result);
}
<div>
<p>1111</p>
<v-cost />
</div>
<div>
<p>22222</p>
<v-cost />
</div>
<div v-for="{ title } in arr" :key="title">
<p>{{title}}</p>
<div class="cost">
<div class="cost__title">test:</div>
<div class="cost__number">3 400 </div>
</div>
</div>
render
функции, но там уже никаких шаблонов - чистый код. Тема "продвинутая", и в твоём случае явно не нужная, так разбирайся сам если хочешь.:)