moysklad-api-model
Version:
Объектная модель API МойСклад для TypeScript проектов
108 lines (107 loc) • 4 kB
TypeScript
import type { Entity } from './Entity';
import type { EntityPatchRef, EntityRef } from './EntityRef';
import type { mediaType } from './MediaType';
export declare const simpleAttributeTypes: readonly ["string", "long", "time", "double", "boolean", "text", "link"];
/** Типы атрибутов, значение которых является сущностью (ссылкой на сущность) */
export type SimpleAttributeType = typeof simpleAttributeTypes[number];
export declare const embeddedEntityAttributeTypes: readonly ["organization", "counterparty", "employee", "contract", "product", "project", "store"];
/** Типы атрибутов, значение которых является сущностью (ссылкой на сущность) */
export type EmbeddedEntityAttributeType = typeof embeddedEntityAttributeTypes[number];
/** Типы атрибутов */
export type AttributeType = SimpleAttributeType | EmbeddedEntityAttributeType | 'file' | 'customentity';
export type AttributeValueByTypeMap = {
string: {
value: string;
};
long: {
value: number;
};
time: {
value: string;
};
file: {
/** Наименование файла */
value: string;
/** Ссылка для скачивания файла */
download: {
href: string;
mediaType: typeof mediaType.ApplicationOctetStream;
};
};
double: {
value: number;
};
boolean: {
value: boolean;
};
text: {
value: string;
};
link: {
value: string;
};
organization: {
value: EntityRef<'organization'>;
};
counterparty: {
value: EntityRef<'counterparty'>;
};
employee: {
value: EntityRef<'employee'>;
};
contract: {
value: EntityRef<'contract'>;
};
product: {
value: EntityRef<'product'>;
};
project: {
value: EntityRef<'project'>;
};
store: {
value: EntityRef<'store'>;
};
customentity: {
value: EntityRef<'customentity'> & {
readonly name: string;
};
};
};
export type Attribute<T extends AttributeType = AttributeType> = Entity<'attributemetadata'> & (T extends SimpleAttributeType | EmbeddedEntityAttributeType | 'customentity' ? {
/** Наименование пользовательского поля */
readonly name: string;
/** Тип значения пользовательского поля */
readonly type: T;
readonly value: AttributeValueByTypeMap[T]['value'];
} : T extends 'file' ? {
/** Наименование пользовательского поля */
readonly name: string;
/** Тип значения пользовательского поля */
readonly type: T;
readonly value: AttributeValueByTypeMap[T]['value'];
readonly download: AttributeValueByTypeMap[T]['download'];
} : never);
export type AttributePatch<T extends AttributeType = AttributeType> = EntityPatchRef<'attributemetadata'> & (T extends 'customentity' ? {
/** Наименование пользовательского поля */
name?: string;
/** Тип значения пользовательского поля */
type?: T;
value: EntityRef<T> | {
name: string;
} | null;
} : T extends 'file' ? EntityPatchRef<'attributemetadata'> & {
/** Наименование пользовательского поля */
name?: string;
/** Тип значения пользовательского поля */
type?: T;
file: {
filename: string;
content: string;
} | null;
} : EntityPatchRef<'attributemetadata'> & {
/** Наименование пользовательского поля */
name?: string;
/** Тип значения пользовательского поля */
type?: T;
value: AttributeValueByTypeMap[T]['value'] | null;
});