🌊
Go TypeScript 型 比較
はじめに
最近バックエンドだけではなくフロントエンドのタスクもやるようになり、Go と TypeScript の型の特徴があることに気づいたのでまとめました。
Go の型の特徴
Go の型の特徴は「厳格」です。下記のコードを例を見てください。Employee
は Person
のすべての型を持っているが、Employee
と Person
は異なる型なのでコンパイルエラーが発生します。このように 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 の型の特徴は「柔軟」です。下記のコードを例を見てください。Employee
は Person
のすべての型をすべて満たしているので異なる型でも引数に取ることができる。このように 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