26 Ekim 2020 Pazartesi

Polyfill Nedir

Giriş
Açıklaması şöyle
A polyfill is code which simulates modern JavaScript features missing in older browsers.
Örnek
Şöyle yaparız
function filter(array, condition) {
  result = []
  for (element of array)
    if condition(element)
      result.push(element)
  return result
}

if (Array does not have filter function)
  Array.filter = filter

6 Ekim 2020 Salı

TypeScript Function Tanımlama

Function Tanımlama
Parametrenin tipi parametre isminden sonra myparameter : string şeklinde yazılır. Function sonuç dönüyorsa yine kapanış parantezinden sonra ): string şeklinde yazılır.

Örnek - const f = {...} Şeklinde
Şöyle yaparız. string veya null dönebilir.
const getErrorTextIfPresent = (r: ValidationResult): string | null => {
  return r.isValid ? null : r.errorText;
}
Örnek
Şöyle yaparız
function reverse(word:string):string{
  ...
}
Örnek  - Optional Parametreler
Optional parametrelerle tanımlamak için şöyle yaparız
function greet(firstName?: string, lastName?: string) {
  if (fistName && lastName) console.log(`Hello, ${firstName} ${lastName}!`)
  else console.log('Hello, World!')
}

greet('John', 'Doe') // Hello, John Doe!
greet() // Hello, World!
greet('John') // Invalid
Örnek - Generics
Şöyle yaparız. Nesnenin üye alanlarının ismini değiştirir. Alan ismi başına "old" getirilir.
type PrefixAll<T, P extends string>  = {
    [K in keyof T & string as `${P}${K}`]: T[K]
}

function prefixProperties<T, P extends string>(obj: T, prefix: P): PrefixAll<T, P> {
    let out = {} as Record<string, unknown>;
    for (let propt in obj) {
        out[prefix + propt] = obj[propt];
      }
    return out as PrefixAll<T, P>;
}

let x : { num: number, date: Date } = { ... };
let y = prefixProperties(x, 'old');

y.olddate
y.oldnum
Örnek
Prototype ile tanımlamak için şöyle yaparız
type Greet = {
     (firstName: string, lastName: string): void;
     (): void;
};
const greet: Greet = (firstName?: string, lastName?: string) => {
  if (firstName && lastName) console.log(`Hello, ${firstName} ${lastName}!`)
  else console.log('Hello, World!')
};

greet('John', 'Doe'); // Hello, John Doe!
greet(); // Hello, World!
greet('John'); // Hello World!

Map Sınıfı

Giriş
Map'e hem bir alan olarak, hem de string olarak ile erişebiliriz.
var myMap = {a: 1, b: 2}
var firstWay = myMap.a
var secondWay = myMap['a']
String bir değişken içinde de olabilir.
property = 'a'
myMap[property] // results in 1
Eğer alan ismi farklı yorumlanmaya açıksa dikkatli olmak gerekir.
obj["a-b"]; // ok
obj.a-b;    // fail! Parsed as `(obj.a) - b`
get metodu
Açıklaması şöyle
But note, it is hashing based on identity, i.e. ===...
Şöyle yaparız
> m1 = new Map([['a', 1]])
Map { 'a' => 1 }
> m2 = new Map()
Map {}
> m2.set(m1, 3)
Map { Map { 'a' => 1 } => 3 }
> m2.get(m1)
3
Ancak şöyle yaparsak çalışmaz
> m2.get(new Map([['a',1]]))
undefined