Pular para o conteúdo principal

Importação de tipos

Todas as interfaces e tipos públicos do SDK são reexportados a partir da raiz do pacote e de um ponto de entrada dedicado, oneentry/types. Você não precisa de caminhos profundos oneentry/dist/....

Versão resumida​

// before — deep path into the build output
import type { IAttributeSchemaItem, IAttributeSetsEntity } from 'oneentry/dist/attribute-sets/attributeSetsInterfaces';

// now — either of these
import type { IAttributeSchemaItem, IAttributeSetsEntity } from 'oneentry';
import type { IAttributeSchemaItem, IAttributeSetsEntity } from 'oneentry/types';

Os dois pontos de entrada expõem o mesmo conjunto de tipos: todas as interfaces e tipos de todos os módulos, incluindo os compartilhados de base/utils (IError, IAttributeValues, ILocalizeInfo, IConfig, …).

Qual ponto de entrada devo usar?​

Importar deUse quando
'oneentry'Você já importa defineOneEntry (ou um helper) da raiz, então uma única linha de importação cobre valores e tipos.
'oneentry/types'Você quer um módulo só de tipos. Ele não tem código de runtime, o que mantém os arquivos só de tipos (*.d.ts, arquivos de modelos compartilhados, contratos de API) livres de importações de valores.

Eles funcionam da mesma forma; escolha o que for mais legível no seu projeto.

Misturando valores e tipos​

O ponto de entrada raiz exporta tanto a API de runtime quanto os tipos, então uma única linha costuma bastar:

import { defineOneEntry } from 'oneentry';
import type { IConfig, IError, IProductsResponse } from 'oneentry';

const config: IConfig = { token: 'your-app-token' };
const api = defineOneEntry('https://your-project.oneentry.cloud', config);

const products: IProductsResponse | IError = await api.Products.getProducts();

Use import type (ou import { type X }) para tipos. A importação é apagada em tempo de compilação, então ela não acrescenta nada ao seu bundle.

As importações profundas continuam funcionando​

As importações de oneentry/dist/<module>/<module>Interfaces continuam compilando. Os pontos de entrada raiz e oneentry/types são acréscimos, então você pode migrar arquivo por arquivo.

// still valid
import type { IOrderData } from 'oneentry/dist/orders/ordersInterfaces';

De onde vêm os tipos?​

Cada módulo do SDK contribui com as suas próprias interfaces, e todas elas estão disponíveis nos dois pontos de entrada:

MóduloTipos típicos
ProductsIProductsEntity, IProductsResponse, IProductsQueryBase, IFilterParams
PagesIPagesEntity, IPositionBlock, PageType
BlocksIBlockEntity, BlockType, IBlockSlidesResponse
OrdersIOrderData, IBaseOrdersEntity, IOrderByMarkerEntity, IRefundRequest
UsersIUserEntity, ICartResponse, IWishlistResponse
Forms / FormDataIFormsEntity, IFormAttribute, IBodyPostFormData, IFormsDataFilter, FormDataStatus
AttributesSetsIAttributeSetsEntity, IAttributeSchemaItem
SearchIGlobalSearchResponse, IGlobalSearchGroup, TGlobalSearchEntityType
Compartilhados (base/utils)IError, IConfig, IAttributeValues, IAttributeValue, IAttributeFile, ITypedAttributeValue, ILocalizeInfo, LangType, IVectorSearchResponse

A lista completa de tipos de um módulo está documentada na página de introdução desse módulo.

Verificando erros​

IError é o tipo por trás do modo padrão do SDK de "erros como valores" (isShell: true). Importe-o da raiz como qualquer outro tipo:

import type { IError } from 'oneentry';

function isErrorResult(result: unknown): result is IError {
return (
!!result &&
typeof result === 'object' &&
('statusCode' in result || 'message' in result)
);
}

const result = await api.Products.getProducts();

if (isErrorResult(result)) {
console.error('Error:', result.message);
} else {
console.log('Success:', result);
}

Relacionados​