2017-01-10 4 views
2

Я хочу, чтобы обеспечить, чтобы objValidator имел те же ключи, что и obj, который он проверяет. Возможно ли это в TypeScript? Любые идеи о том, как я могу реализовать что-то вроде этого ниже? В основном obj и objValidator должны иметь одинаковые ключи, но значения ключей разные.Может потребоваться два разных интерфейса TypeScript, чтобы иметь одинаковые ключи, но иметь разные значения?

Я хотел бы иметь возможность быть предупрежденным, если мой objValidator не имеет точных ключей, что и obj.

interface obj { 
    alpha: number 
    beta: string 
} 

interface objValidator { 
    alpha: { 
    message: string 
    valid(ALPHA'S TYPE): boolean 
    } 
    beta: { 
    message: string 
    valid(BETA'S TYPE): boolean 
    } 
} 

ответ

1

Что-то вроде этого, используя mapped types возможно:

interface Obj { 
    alpha: number 
    beta: string 
} 

type Validator<T> = { 
    [P in keyof T]: {message: string, valid: boolean}; 
}; 

let o: Obj = { alpha: 1, beta: "123" }; 
let v: Validator<Obj> = 
{ 
    alpha: { 
    message: "ok", 
    valid: true 
    }, 
    beta: { 
    message: "not ok", 
    valid: false 
    } 
} 
+0

Изменяя 'действительный: boolean' в' действительно: (т: T [P]) => boolean' вы можете иметь пользовательское поведение для проверка ключа также @JoeyFarina –

Смежные вопросы