16 Mayıs 2020 Cumartesi

await function Anahtar Kelimesi

Giriş
async metodun bitmesini bekler.
Örnek
Elimizde şöyle bir soru olsun
You have three functions, which are all asynchronous:

loadReport(id) which fetches the definition of a report
runReport(report) which runs the report and returns a path to a PDF output file
sendReport(filePath) which mails the file to subscribers and returns true if succeeded

Write code that executes a report using these three functions and shows alert if everything went well. Each of these functions can throw an exception. How would you handle it?
Şöyle yaparız
try {
  const report = await loadReport(id)
  const outputPath = await runReport(report)
  const completed = await sendReport(outputPath)
  alert(completed ? 'Done!' : 'Bad monkey!')
} catch (error) {
  alert(error.message)
}
Örnek
Şöyle yaparız. Her bir saniye de bir dizideki bir sayıyı döner. Çıktı olarak 5,4,3,2,1 alırız.
const delay = ms => new Promise(res => setTimeout(res, ms));
async function x() {
  const array = [1, 2, 3, 4, 5, 6, 7, 8].slice(0, 5);
  for (const item of array.reverse()) {
    console.log(item);
    await delay(1000);
  }
}

x()
Örnek
Elimizde şöyle bir kod olsun.
const getUserByImportMail = async (mail) => {
  const mailResult = ...
  ...
  return mailResult
}
Şöyle yaparız.
const isSenderValid = async mail => {
  const importMail = await getUserByImportMail({importMail: mail})
  ...
  // some checks
  return importMail
}
await yerine Promise.then kullanılabilir. Şöyle yaparız.
const isSenderValid = mail => {
  return getUserByImportMail({importMail: mail})
  .then(importMail => {
      ...
some checks
      return importMail
  });
}

4 Mayıs 2020 Pazartesi

TypeScript

Kurulum
Şöyle yaparız.
npm i typescript @types/express ts-node-dev -D
tsconfig.json Dosyası
sconfig.json Dosyası yazısına taşıdım.

Temel Tipler
string,
number
boolean
array tipler örneğin string[]
object
Örnek
Şöyle yaparız
subject: string = "abc";
Function Tanımlama
TypeScript Function Tanımlama yazısına taşıdım.

Interface Tanımlama
Daha çok kullanılacak veri modelini tanımlar.
Açıklaması şöyle.
Interfaceler birbirlerinden extend olabilirler.
Interfaceler birbirlerinden implement olamazlar.
Interfaceler değişkenlere, sınıflara atanabilirler.
Örnek
Şöyle yaparız.
interface Person (

  name:string;
  age:number;
  ...
}
Interface Extends
Şöyle yaparız.
interface Base {
  a: number;
  b: number;
  c: string;
 }

interface Child extends Base {
  d: string;
}

const data: Child = {
  a: 1,
  b: 2,
  c: "1",
  d: "2"
}


function test(data: Base) {
  ...
}
Class Tanımlama
Örnek
Şöyle yaparız.
class Greeter {
  public static What(): string {
    return "Greater";
  }

  public subject: string;

  constructor(subject: string) {
    this.subject = subject;
  }

  public greet(): string {
    return "Hello, " + this.subject;
  }
}
Type Alias
type anahtar kelimesi ile başlar. | karakteri (or karakter) seçenekler birleştirilir
Örnek
Şöyle yaparız
interface Valid {
  isValid: true;
}

interface Invalid {
    isValid: false;
    errorText: string;
}

type ValidationResult = Valid | Invalid

const validate = (n: number): ValidationResult => {
    return n === 4 ? { isValid: true } : { isValid: false, errorText: "num is not 4" }
}
Örnek
Şöyle yaparız.
type BarData = { bar: number }
type FooData = { foo: number }
type BazData = { baz: number }

class MyClass {

  foo(data: FooData) {
    //Do Something
  }
  bar(data: BarData) {
    //Do Something
  }

  baz(data: BazData) {
    //Do Something
  }    
}
package.json Dosyası
Şöyle yaparız.
"devDependencies": {
  "@types/react":"^16.3.15"
  "@types/react-dom":"^16.0.5"
  "typeScript":"^2.8.3"
}

Compiler
Compiler'ın ismi tsc. Javascript aslında bytecode'a çevrilmez.
--project seçeneği
Örnek
Şöyle yaparız.
tsc --project tsconfig.client.json
tsc --project tsconfig.server.json