🌊

Go TypeScript 型 比較

2023/10/09に公開

はじめに

最近バックエンドだけではなくフロントエンドのタスクもやるようになり、Go と TypeScript の型の特徴があることに気づいたのでまとめました。

Go の型の特徴

Go の型の特徴は「厳格」です。下記のコードを例を見てください。EmployeePerson のすべての型を持っているが、EmployeePerson は異なる型なのでコンパイルエラーが発生します。このように Go では異なる型を引数に使うことができません。

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

type Employee struct {
    Name   string
    Age    int
    Salary float64
}

func printName(p Person) {
    fmt.Println(p.Name)
}

func main() {
    e := Employee{Name: "Alice", Age: 25, Salary: 50000}
    printName(e)  // コンパイルエラー
}

TypeScript の型の特徴

TypeScript の型の特徴は「柔軟」です。下記のコードを例を見てください。EmployeePerson のすべての型をすべて満たしているので異なる型でも引数に取ることができる。このように TypeScript は満たしていれば異なる型でも使うことができる

type Person = {
    name: string;
    age: number;
}

type Employee = {
    name: string,
    age: number,
    birthday: string
}

function printPerson(p: Person) {
    console.log(p)
}

const employee: Employee = {
    name: "Charlie",
    age: 30,
    birthday: "07/13"  // このプロパティはPersonインターフェースには存在しない
};

printPerson(employee);  // コンパイルエラーが発生する可能性があるが、ageプロパティは正常に扱われる

補足: 部分一致していないと型エラーが発生する

Discussion