#javascript #typescript
#javascript #typescript
Вопрос:
Я создаю функцию, в которой она принимает type и field в качестве своих аргументов.
В основном функции первый аргумент является ключом объекта errorTypes, а второй аргумент — errorArgTypes .
Я получаю сообщение об ошибке // Все параметры типа не используются; для приведенного ниже кода.
пожалуйста, сообщите.
type errorArgTypes = {
field: string;
};
const errorTypes = {
INTERNAL_SERVER_ERROR: {
code: 500,
message: "Internal Server Error 😵",
},
AUTH_NOT_FOUND: {
code: 401,
message: "User Not Found ❗️",
},
AUTH_ALREADY_EXIST: {
code: 404,
message: "User Already Existed 👀",
},
AUTH_NOT_MATCH: {
code: 402,
message: "Email or Password Not Match 🥑",
},
AUTH_NO_PERMISSION: {
code: 403,
message: "No Permission 🔫",
},
DATA_NOT_FOUND: {
code: 401,
message: "No Data 😕",
},
};
type typeOfError = key in errorTypes;
const foo = {
"hello": "hola"
};
let data: { [key in keyof typeof foo]:number} amp; { name: string, index: number }[] = [] as any;
function prop<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
// All type parameters are unused;
const BaseError = <Key extends keyof typeOfError, errorArgTypes>(type, arg?) => {
const { code, message } = errorTypes[type];
return new ApolloError(message, code, arg);
};
Комментарии:
1. Пожалуйста, используйте
keyof typeof errorTypes
вместоkey in errorTypes
. Какой тип вы ожидаете здесь:type, arg?
?2. Я не могу воспроизвести описанную вами ошибку . Игровая площадка TS показывает ошибку в
BaseError
because ofnoImplicitAny
, но не говорит, что параметры не используются. Отключение правила оставляет две другие ошибки —key in errorTypes
недопустимый синтаксис иApolloError
не определено.
Ответ №1:
Попробуйте этот подход:
const errorTypes = {
INTERNAL_SERVER_ERROR: {
code: 500,
message: "Internal Server Error 😵",
},
AUTH_NOT_FOUND: {
code: 401,
message: "User Not Found ❗️",
},
AUTH_ALREADY_EXIST: {
code: 404,
message: "User Already Existed 👀",
},
AUTH_NOT_MATCH: {
code: 402,
message: "Email or Password Not Match 🥑",
},
AUTH_NO_PERMISSION: {
code: 403,
message: "No Permission 🔫",
},
DATA_NOT_FOUND: {
code: 401,
message: "No Data 😕",
},
};
type errorArgTypes = {
field: string;
};
const BaseError = <
Key extends keyof typeof errorTypes,
errorArgTypes
>(type: Key, arg?: errorArgTypes) => {
const { code, message } = errorTypes[type];
return new ApolloError(message, code, arg);
};