typescript - Membobol TS1337 untuk validator formulir kustom di angular versi TS 3.8
Saya sedang menulis validator formulir kustom saya sendiri untuk Angular dengan template berikut.
static customFunction(param: number, param2: string): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } => {
return { customError: {param, param2} };
};
}
Alih-alih key:string saya ingin hanya memperbolehkan sejumlah item dari enum yang telah ditentukan.
export enum FormErrorEnum {
unknown = 'unknown',
customError = 'customError',
}
export type FormError = keyof typeof FormErrorEnum;
Jika saya mencoba menggunakan salah satu [key: FormError]: any atau [key in FormError]: any, saya akan mendapatkan salah satu dari dua kesalahan.
[key: FormError]: any menghasilkan TS1337. [key in FormError]: any menghasilkan pengembalian (customError: {param,param2}) ditolak karena tidak mencakup semua entri di enum.
Saya sudah melihat thread ini. Versi TS adalah 3.8 - meningkatkan versi adalah sebuah opsi.
Jawaban #1
Anda dapat menggunakan tipe literal sebagai pengganti enum.
export type FormError = 'unknown' | 'customError';
const error1: FormError = 'unknown'; // ok
const error2: FormError = 'illegal'; // error
Tipe pengembalian di customFunction Anda seharusnya:
type ErrorResult = {
[P in FormError]?: any;
};
Jika Anda mengizinkan tepat satu properti dari FormError:
type ErrorResult = {
[P in FormError]: { [K in P]: any };
}[FormError];
Idenya di balik ini adalah: Buat tipe yang dibutuhkan untuk setiap kunci: { [K in P]: any }. Masukkan mereka ke dalam sebuah peta: { [P in FormError]: {...} }. Dapatkan nilai-nilai dari peta tersebut: [FormError]
