Đối với việc xác nhận lược đồ, tôi đề xuất zod.
Điểm nổi bật
- API có tính biểu đạt, có thể chuỗi kết nối
- Nhiều kiểm tra tích hợp sẵn
- Hỗ trợ kiểm tra tùy chỉnh
- Tự động suy luận nhãn trong Node.js
- Được viết bằng TypeScript
Cài đặt
npm install ow
Sử dụng
import ow from 'ow';
const unicorn = input => {
ow(input, ow.string.minLength(5));
// …
};
unicorn(3);
//=> ArgumentError: Expected `input` to be of type `string` but received type `number`
unicorn('yo');
//=> ArgumentError: Expected string `input` to have a minimum length of `5`, got `yo`
Chúng ta cũng có thể so khớp hình dạng của một đối tượng.
import ow from 'ow';
const unicorn = {
rainbow: '🌈',
stars: {
value: '🌟'
}
};
ow(unicorn, ow.object.exactShape({
rainbow: ow.string,
stars: {
value: ow.number
}
}));
//=> ArgumentError: Expected property `stars.value` to be of type `number` but received type `string` in object `unicorn`
_ Lưu ý:_ Nếu bạn chỉ định sử dụng ow
cho mục đích phát triển, hãy sử dụng import ow from 'ow/dev-only'
thay vì import ow from 'ow'
như thường lệ, và chạy trình gói với NODE_ENV
được thiết lập thành production
(ví dụ: $ NODE_ENV="production" parcel build index.js
). Điều này sẽ khiến ow
tự động xuất khẩu một bộ shim khi chạy ở chế độ production, giúp giảm kích thước gói đáng kể.
API
Ow bao gồm các kiểm tra kiểu TypeScript, do đó việc sử dụng nó sẽ hạn chế kiểu của các giá trị trước đó không biết.
function (input: unknown) {
input.slice(0, 3) // Error, Property 'slice' does not exist on type 'unknown'
ow(input, ow.string)
input.slice(0, 3) // OK
}
ow(value, predicate)
Kiểm tra xem value
có khớp với predicate
được cung cấp hay không. Nếu kiểm tra thất bại, nó sẽ ném ra một ArgumentError
.
ow(value, label, predicate)
Kiểm tra xem value
có khớp với predicate
được cung cấp hay không. Nếu kiểm tra thất bại, nó sẽ ném ra một ArgumentError
với label
cụ thể.
Trong Node.js, label
sẽ được suy luận tự động, nhưng bạn có thể ghi đè bằng cách truyền giá trị cho label
. Việc suy luận nhãn tự động không hoạt động trong trình duyệt.
ow.isValid(value, predicate)
Trả về true
nếu giá trị khớp với predicate
, ngược lại trả về false
.
ow.create(predicate)
Tạo một bộ kiểm tra có thể tái sử dụng.
const checkPassword = ow.create(ow.string.minLength(6));
const password = 'foo';
checkPassword(password);
//=> ArgumentError: Expected string `password` to have a minimum length of `6`, got `foo`
ow.create(label, predicate)
Tạo một bộ kiểm tra có thể tái sử dụng với label
cụ thể.
const checkPassword = ow.create('password', ow.string.minLength(6));
checkPassword('foo');
//=> ArgumentError: Expected string `password` to have a minimum length of `6`, got `foo`
ow.any(…predicate[])
Trả về một tiền định kiểm tra xem giá trị có khớp ít nhất một trong các tiền định cho trước.
ow('foo', ow.any(ow.string.maxLength(3), ow.number));
ow.optional.{type}
Làm cho tiền định trở nên tùy chọn. Tiền định tùy chọn có nghĩa là nó sẽ không thất bại nếu giá trị là undefined
.
ow(1, ow.optional.number);
ow(undefined, ow.optional.number);
ow.{type}
Tất cả các loại dưới đây trả về một tiền định. Mỗi tiền định có một số toán tử bổ sung mà bạn có thể sử dụng để kiểm tra giá trị một cách cụ thể hơn.
Nguyên thủy
undefined
null
string
number
boolean
symbol
Loại được tích hợp sẵn
array
function
buffer
object
regExp
date
error
promise
map
set
weakMap
weakSet
Mảng có kiểu dữ liệu
int8Array
uint8Array
uint8ClampedArray
int16Array
uint16Array
int32Array
uint32Array
float32Array
float64Array
Dữ liệu có cấu trúc
arrayBuffer
dataView
sharedArrayBuffer
Đa dạng
nan
nullOrUndefined
iterable
typedArray
Tiền định
Các tiền định sau đây có sẵn trên mọi loại.
không phải
Đảo ngược tiền định sau đó.
ow(1, ow.number.not.infinite);
ow('', ow.string.not.empty);
//=> ArgumentError: Expected string to not be empty, got ``
là(fn)
Sử dụng một chức năng xác thực tùy chỉnh. Trả về true
nếu giá trị khớp với xác thực, trả về false
nếu không khớp.
ow(1, ow.number.is(x => x < 10));
ow(1, ow.number.is(x => x > 10));
//=> ArgumentError: Expected `1` to pass custom validation function
Thay vì trả về false
, bạn cũng có thể trả về một thông báo lỗi tùy chỉnh dẫn đến sự thất bại.
const greaterThan = (max: number, x: number) => {
return x > max || `Expected \`${x}\` to be greater than \`${max}\``;
};
ow(5, ow.number.is(x => greaterThan(10, x)));
//=> ArgumentError: Expected `5` to be greater than `10`
xác thực(fn)
Sử dụng một đối tượng xác thực tùy chỉnh. Sự khác biệt so với là
là hàm nên trả về một đối tượng xác thực, điều này cho phép linh hoạt hơn.
ow(1, ow.number.validate(value => ({
validator: value > 10,
message: `Expected value to be greater than 10, got ${value}`
})));
//=> ArgumentError: (number) Expected value to be greater than 10, got 1
Bạn cũng có thể truyền vào một chức năng như giá trị message
chấp nhận nhãn như đối số.
ow(1, 'input', ow.number.validate(value => ({
validator: value > 10,
message: label => `Expected ${label} to be greater than 10, got ${value}`
})));
//=> ArgumentError: Expected number `input` to be greater than 10, got 1
tin nhắn(chuỗi | fn)
Cung cấp một thông điệp tùy chỉnh:
ow('🌈', 'unicorn', ow.string.equals('🦄').message('Expected unicorn, got rainbow'));
//=> ArgumentError: Expected unicorn, got rainbow
Bạn cũng có thể truyền vào một chức năng nhận giá trị là tham số đầu tiên và nhãn là tham số thứ hai và được kỳ vọng trả lại thông điệp.
ow('🌈', ow.string.minLength(5).message((value, label) => `Expected ${label}, to have a minimum length of 5, got \`${value}\``));
//=> ArgumentError: Expected string, to be have a minimum length of 5, got `🌈`
Cũng có thể thêm một thông điệp riêng cho mỗi xác thực:
ow(
'1234',
ow.string
.minLength(5).message((value, label) => `Expected ${label}, to be have a minimum length of 5, got \`${value}\``)
.url.message('This is no url')
);
//=> ArgumentError: Expected string, to be have a minimum length of 5, got `1234`
ow(
'12345',
ow.string
.minLength(5).message((value, label) => `Expected ${label}, to be have a minimum length of 5, got \`${value}\``)
.url.message('This is no url')
);
//=> ArgumentError: This is no url
Điều này có thể hữu ích để tạo ra các bộ xác thực có thể tái sử dụng riêng của bạn, có thể được trích xuất thành một gói npm riêng biệt.
TypeScript
Yêu cầu TypeScript 4.7 hoặc cao hơn.
Ow bao gồm một tiện ích loại cho phép bạn trích xuất một loại TypeScript từ tiền định cho trước.
import ow, {Infer} from 'ow';
const userPredicate = ow.object.exactShape({
name: ow.string
});
type User = Infer<typeof userPredicate>;
Người bảo trì
Người cũ:
Liên quan
- @sindresorhus/is – Kiểm tra giá trị theo loại
- ngx-ow – Xác thực biểu mẫu Angular mạnh hơn
Thông tin tải xuống:
Tác giả: sindresorhus
Mã nguồn: https://github.com/sindresorhus/ow
Giấy phép: MIT license