Можно ли сузить интерфейс Influxdb IPoint по его схеме? - PullRequest
0 голосов
/ 04 июня 2019

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 игровая площадка: таким образом

...