types
, в которой для каждого покета создаетя поддиректоория содержащая файл index.d.ts
. Имя поддиректории задается исходя из име пакета. В вашем случаи будет так ./types/svg/index.d.ts
declare module "*.svg";
tsconfig.json
в массиве "typeRoots": ["./types"]
include
, по оно содержит массив путей для файлов участвующих в компиляции и в большинстве случаев объявляется совместно с полем exclude
. В паре они помогают оптимизировать процесс компиляции. let a = new Array()
let b = new Array()
let c = new Array()
let d = new Array()
// объектов может быть много, с ращзными данными
// и с разными методами
a.hello = ()=>console.log('Yarrr!') // теперь у объекта "a" есть новый метод
a.hello() // -> Yarrr! его можно вызвать
// но если сделать b.hello() - будет ошибка
console.log('is same object?', a === b) // -> false объекты разные
console.log('is same prototype?', a.__proto__ === b.__proto__) // а прототоип одинаковый (общий)
// но при этом у каждого из них есть .length или .concat()
// потому что эти методы прописаны в прототипе
console.log(a.__proto__)
a.__proto__.tost = ()=>console.log('test') // а этот метод добавился всем
b.tost() // -> test
function f() {}
var o = new f();
console.log(o.x); //undefined
f.prototype.x = 123;
console.log(o.x); //123
var e = new f();
console.log(e.x); //123
e.x = 234;
console.log(e.x); //234
console.log(o.x); //123
f.prototype.x = 555;
console.log(e.x); //234
console.log(o.x); //555
console.log(o === e); //false
console.log(o.__proto__ === e.__proto__); //true
console.log(o.__proto__ === f.prototype); //true
console.log(o instanceof f); //true
//Бонус
Array.prototype.couple = function(){return this[0] + this[1]};
[3,4,5].couple(); //7
function scroll_active() {
/* вычисляем значения прокрутки страницы по вертикали */
var window_top = $(window).scrollTop();
/* вычисляем положение якорей на странице от начала страницы по вертикали*/
var menu_top = $('a[name="menu"]').offset().top -10;
var gallery_top = $('a[name="gallery"]').offset().top -10;
/* раздел «Контакты» у меня на странице расположен самым последним разделом, и небольшой, поэтому если контаты уже отобразались на странице, тогда активирую пункт меню «Контакты» */
var contacts_top = $('a[name="contacts"]').offset().top - $(window).height() + 180;
/* Переключатель активного пункта меню в зависимости от положения на странице, условии написаны от последнего якоря на странице, до первого */
/* если на экране отображаются раздел «Контакты»*/
if (window_top > contacts_top) {
$(".main_menu li").removeClass("active");
$('a[href="#contacts"]').parent().addClass("active");
}
/* если не отображается раздел «Контакты», но страницу прокрутили ниже якоря третьего раздела*/
else if (window_top > gallery_top) {
$(".main_menu li").removeClass("active");
$('a[href="#gallery"]').parent().addClass("active");
}
/* если выше третьего, но ниже якоря второго раздела*/
else if (window_top > menu_top) {
$(".main_menu li").removeClass("active");
$('a[href="#menu"]').parent().addClass("active");
}
/* если не подходят условия предыдущие активируем первый пункт меню*/
else {
$(".main_menu li").removeClass("active");
$('a[href="#page_top"]').parent().addClass("active");
}
}
jQuery(function()
{
jQuery(window).scroll(scroll_active);
});