Я определил service type
, и моя цель — создать функцию с двумя параметрами.
что-то вроде ниже
type MyService = {
service1: { x: string, y: number },
service2: { m: string, n: number },
};
function useService(ns: keyof MyService, serviceNames: Array<keyof MyService[typeof ns extends keyof MyService ? typeof ns : never]>): void {
console.info(serviceNames);
}
useService('service1', ['x', 'y']); // now the second parameter type is always never
Я не знаю, может ли ts проверить тип времени выполнения? Пожалуйста посоветуй.
К сожалению, Typescript не может проверить это во время выполнения...
Этот вопрос может быть вам полезен
Код машинописного текста, когда он компилируется, результирующий код JS никогда не имеет типов. Поэтому он не может проверить во время выполнения.
"use strict";
function useService(ns, serviceNames) {
console.info(serviceNames);
}
useService('service1', ['x', 'y']);
Я думаю, что это решение, которое вы можете захотеть.
используйте универсальный, чтобы получить тип из аргументов.
type MyService = {
service1: { x: string, y: number },
service2: { m: string, n: number },
};
function useService<T extends keyof MyService>(ns: T, serviceNames: Array<keyof MyService[T]>): void {
console.info(serviceNames);
}
useService('service1', ['x', 'y']); // it'll remove the error