InfluxDB предоставляет приятный TypeScript-интерфейс.Можно предоставить Record-Schema, используя ISchemaOptions.Было бы неплохо сузить интерфейс IPoint относительно этой схемы.Играл с условными и сопоставленными типами, но не смог заставить его работать.Это вообще возможно?
import {FieldType, IPoint, ISchemaOptions} from "influx";
const schema:ISchemaOptions = {
measurement: "resources",
fields: {
cpu: FieldType.FLOAT,
},
tags: ["test"]
};
type Field<Type extends FieldType> =
Type extends FieldType.BOOLEAN ? boolean:
Type extends FieldType.FLOAT ? number:
Type extends FieldType.INTEGER ? number:
Type extends FieldType.STRING ? string:
never;
type Fields<S extends ISchemaOptions> = {
[F in keyof S['fields']]: Field<S['fields'][F]>
}
type DataPoint<S extends ISchemaOptions> = {fields: Fields<S>} & IPoint;
function data<S extends ISchemaOptions>(s:S, fields:Fields<S>) :DataPoint<S> {
const d = {} as any;
d.fields = fields;
return d as DataPoint<S>
}
data(schema, {cpu:'string'});
Не появляется сообщение об ошибке, но должно отображаться сообщение об ошибке, поскольку свойство 'cpu' должно иметь тип номер, а не строку.
TypeScript игровая площадка: таким образом