👏
Typescriptを使い慣れた人のためのPython型定義
pythonのバージョンは3.11を想定しています
環境設定
mypyを使います
基本
この辺はTypescriptユーザーであっても、すぐに分かるかと思います。
sample1 :bool = false
sample2 :int = 3
sample3 :float = 3.14
sample4 :str = 'pie'
# ユニオン
sample5 :int|str
配列(pythonで言うリスト、タプル)
例えばint型のリストなら以下のような書き方
var sample10:number[]
sample10 = [1,2,3] //OK
sample10 = ['a','b','c'] //NG
sample10:list[int]
sample10 = [1,2,3,4] #OK
sample10 = ['a','b',3] #NG
要素の数も決まっているタプルの場合は、要素の数だけ定義を記述します
sample11:tuple[int,int,str]
sample11 = (1,2,'aaa') #OK
sample11 = (1,'aaa') #NG
オブジェクト(pythonで言う辞書)
keyとvalueのみ定義したい場合
typescriptの場合、typeやinterfaceで型定義ができました。
type ObjSample = {
[key:string]:String|Number
}
const sample21:ObjSample = {id:1,name:'aaa',age:12} //OK
const sample22:ObjSample = {id:1,name:false,age:12} //NG
pythonの場合は、typeやinterfaceのような型定義の宣言はありませんので、変数宣言時に型を指定する必要があります
sample20:dict[str,int|str]
sample20 = {'id':1,'name':'aaa','age':12} #OK
sample20 = {'id':1,'name':False,'age':12} #NG
オブジェクトの中身も定義したい場合
type Sample10 = {
id:Number,
name:String,
age:Number,
sex?:Bool # 必須でない項目
}
pythonの場合はTypeDictを引数にとったクラスで定義します。
from typing import TypedDict, NotRequired
class TypeSample(TypedDict):
id:int
name:str
age:int
sex:NotRequired[bool] # 必須でない項目
sample23:TypeSample = {'id':1,'name':'aaa','age':12} #'sex'はなくてもOK
sample24:TypeSample = {'id':1,'name':'aaa','age':12,'sex':True} #OK
sample25:TypeSample = {'id':1,'name':'aaa'} # ageがないとエラーが出る
sample26:TypeSample = {'id':1,'name':'aaa','age':'12歳'} # ageの型が異なるとエラーが出る
Discussion