Cách xóa động các khóa khỏi một đối tượng đã nhập trong TypeScript
Làm cách nào để xóa động các khóa khỏi một đối tượng đã nhập?
Ví dụ: giao diện của tôi QUERY_PARAMS
là:
export interface QUERY_PARAMS {
query: string;
min_height?: string;
max_height?: string;
min_width?: string;
max_width?: string;
color?: string;
image_type?: IMAGETYPE;
order?: ORDER;
orientation?: ORIENTATION;
}
Mã của tôi để cố gắng xóa động các khóa:
async getAllImages(inputParams: QUERY_PARAMS) {
for (let key in inputParams) {
if (!inputParams[key]) {
delete inputParams[key]
}
}
// ...
}
Nó ném ra lỗi:
phần tử ngầm định có kiểu 'bất kỳ' vì không thể sử dụng biểu thức của kiểu 'chuỗi' để lập chỉ mục loại 'QUERY_PARAMS'. Không tìm thấy chữ ký chỉ mục có tham số kiểu 'chuỗi' trên loại 'QUERY_PARAMS'
Trả lời
1 bsapaka
Lỗi này là bởi vì key
là một chuỗi, mà không phải là đủ cụ thể để có một thuộc tính của inputParams
, tức là keyof QUERY_PARAMS
. Hiện tại TS không cho phép bạn xác định kiểu cho biến lặp của for
vòng lặp (sự cố # 3500 ), nhưng bạn có thể thực hiện xác nhận kiểu trên khóa bên trong vòng lặp:
export interface QUERY_PARAMS {
query: string;
min_height?: string;
// ...
}
async function getAllImages(inputParams: QUERY_PARAMS) {
for (let key in inputParams) {
const k = key as keyof QUERY_PARAMS; // <-- type assertion
if (!inputParams[k]) {
delete inputParams[k]
}
}
// ...
}
const p: QUERY_PARAMS = {
query: 's',
min_height: undefined,
}
console.log(p); // { query: 's', min_height: undefined }
getAllImages(p);
console.log(p); // { query: 's' }