라이브러리 없이 간단한 타이프스크립트 데이터 유효성 검사

6610 단어 validationtypescript
함수 인수가 런타임에 올바른 유형인지 확인하십시오!

import {validate} from './validate'

const validGetUserArgs = Object.freeze({
    authToken: '',
    pubkey: new PublicKey()
    atTime:  new Date()
})

type GetUserArgs = typeof validGetUserArgs

function getUser(args: GetUserArgs) {
    validate(args, validGetUserArgs)
    checkToken(args.authToken)
    db.get({pubkey: args.pubkey, at: args.atTime})
}


다음은 해당 validate 함수에 대한 한 가지 정의입니다.

function validate<T>(obj: T, valid: T) {
    for (const k in valid) if (!(k in obj)) throw Error(`missing key ${k}`)
    for (const k in obj) if (!(k in valid)) throw Error(`unknown key ${k}`)
    for (const k in obj) {
        const got = typeof obj[k]
        const wanted = typeof valid[k]
        if (got !== wanted) {
            throw Error(`argument ${k} had type ${got} instead of ${wanted}`)
        }
    }
}


데모typescript playground

이것은 제한적입니다. 유니온, 옵셔널, 네스팅, 클래스가 아닌 인터페이스 등으로 인해 골칫거리가 될 것입니다.

좋은 웹페이지 즐겨찾기