document.addEventListener('DOMContentLoaded', function() {
let numbers = [
'+38 (095) 123 45 67',
'+38 (096) 123 45 67',
'+38 (097) 123 45 67',
'+38 (098) 123 45 67',
'+38 (099) 123 45 67',
];
function getNumber(numbers){
numbers.push(numbers.shift());
return numbers[0];
}
function setNumber(number){
let link = document.getElementById('phone');
link.innerText = number;
link.setAttribute('href', 'tel:' + number);
}
function update(){
setNumber(getNumber(numbers));
}
update();
setInterval(update, 2000);
});
Array.isArray
и ещё сразу проверять идентичность длины и её наличие. const f = (a, b) => Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.length > 0 ?
a.every((item, index) => f(item, b[index])) :
a === b;
console.log(f([0, 1, [3]], [0, 1, [3]]))
let params = new URLSearchParams(location.search);
if(params.has(`lang__ee`)){
document.querySelector(`selector`).textContent = `Some Text`.
}else{
document.querySelector(`selector`).textContent = `Other Text`.
}
selector
заменить на валидный селектор существующего элемента в который требуется вывести сообщение. undefined
можно заменить опционалыным модификатором ?
.function а (a?: number, b?: number) {}
type Sum = (a?: number, b?: number) => number;
interface ISum { (a?: number, b?: number): number; }
const sum: Sum = (a, b) => a + b;
T
у которого отсутствуют признаки типа ITest
, о чем и говорит ошибка. Это вы думаете что с помощью аргументов типа конкретизировали возвращаемое функцией значение. То есть вы смотрите как-бы из вне. Но компилятору необходимо сопоставить типы внутри самой функции. Выполняя это он и обнаруживает несоответствие типа { testField: number }
типу T
.interface StateProps {
a: number;
b: string;
c: boolean;
}
interface Action<P> {
payload: Partial<P>;
}
const f = <P>(state: P, { payload }: Action<P>): P => ({
...state,
...payload,
});
let nextState = f(
{ a: 0, b: '', c: true },
{ payload: { c: false } }
);
.tsx
. webpack
будет лучшим решением. Почитайте о механизме мулти-конфигурации, которая позволяет запускать одновременно несколько конфигураций (в вашем случае это клиент и сервер конфигурации). К тому же стоит напомнить о необходимости в nodemon
чтобы перезапускать сервер при изменении его файлов.ts-node
будет в самый раз для dev разработки исключительно одного сервера. class Flintstone {
say() {
console.log(` Yabba-Dabba Do`);
}
}
let fred = new Flintstone();
let list =['say'] as const;
fred[list[0]];
enum
или const enum
class Flintstone {
say() {
console.log(` Yabba-Dabba Do`);
}
go() {
}
}
let fred = new Flintstone();
const enum FlintstoneMethod {
Say = `say`
}
let keys: FlintstoneMethod[] = [FlintstoneMethod.Say];
fred[keys[0]]();
function increaseSalary() {
return new Promise((resolve, reject) => {
let minSalaryEmployee = Promise.resolve().then((employeeData) => {
return { };
});
minSalaryEmployee
.then((data) => {
let newSalary = Promise.reject();
newSalary
.then((newData) => {
resolve(`Ok`);
})
.catch((e) => {
reject(`Error`)
});
})
.catch(reject);
});
}
increaseSalary()
.then(console.log)
.catch(console.error);
import React from "react";
import "./styles.css";
const data = [{
"id": "market-executive-summary",
"title": "Executive Summary",
"interactivity": false,
"priceFactor": 2,
"children": [{
"id": "market-executive-summary-overview",
"title": "Overview",
"interactivity": false,
"priceFactor": 0,
"children": []
}, {
"id": "market-executive-summary-key-findings",
"title": "Key Findings",
"interactivity": false,
"priceFactor": 0,
"children": []
}, {
"id": "market-executive-summary-conclusions-implications",
"title": "Conclusions & Implications",
"interactivity": false,
"priceFactor": 0,
"children": []
}]
},
{
"id": "market-definitions-segmentation",
"title": "Definitions & Segmentation",
"interactivity": false,
"priceFactor": 2,
"children": [{
"id": "market-definitions-segmentation-definitions",
"title": "Definitions",
"interactivity": false,
"priceFactor": 0,
"children": []
}]
}
]
const List = ({data}) => {
let children = data.map(data => <Item {...data}/>)
return (
<ul id>
{children}
</ul>
);
}
const Item = ({id, title, children}) => {
let list = children.length ? <List data={children}/> : null;
return (
<li>
<span>{title}</span>
{list}
</li>
);
}
export default function App() {
return (
<List data={data}/>
);
}