У меня есть это:
export type FieldType = 'number' | 'boolean' | 'string';
export interface IField {
key: string;
value: any;
type: FieldType;
}
Можно ли заменить values
тип any
другим определением, чтобы значения, хранящиеся в свойстве value
, действительно имели тип, который type
поле содержит. Т.е. если объект имеет 'string'
значение в свойстве type
, значения, которые содержит свойство value
, должны иметь тип string
(и так же для number
и boolean
также).
Итак что это работает так:
const booleanTypeError = <IField>{
key: 'someKey',
value: 'true', // throw error
type: 'boolean'
};
const booleanTypeOK = <IField>{
key: 'someKey',
value: true, // no error
type: 'boolean'
};
const stringTypeOK = <IField>{
key: 'someKey',
value: 'true', // no error
type: 'string'
};
const stringTypeError = <IField>{
key: 'someKey',
value: true, // throw error
type: 'string'
};
Я пытался использовать keyof
и typeof
, но не повезло, поскольку я все время получал ошибки. Я использую TypeScript 3.7.5 (но я также могу использовать 3.8).