Skip to content

Type of Alignment (and other constants) in types/index.d.ts is a 'type' instead of a 'value' #298

@saperdadsk

Description

@saperdadsk

Currently, Alignment is exported as a variable directly in index.js

export { default as Column, Alignment, FrozenDirection } from './Column';

and is defined as

export const Alignment = {
  LEFT: 'left',
  CENTER: 'center',
  RIGHT: 'right',
};

However, in types/index.d.ts, Alignment is specified as

export type Alignment = 'left' | 'right' | 'center';

which is a type, not a value. This means that a statement like

import { Alignment } from 'react-base-table'

const column = {
  align: Alignment.CENTER
}

Will fail if compiled with typescript, since types cannot be used as values:

'Alignment' only refers to a type, but is being used as a value here.ts(2693)

Later in types/index.d.ts, Column.Alignment is typed:

  export class Column<T = unknown> extends React.Component<ColumnShape<T>> {
    static readonly Alignment: {
      readonly LEFT: 'left';
      readonly CENTER: 'center';
      readonly RIGHT: 'right';
    };
    static readonly FrozenDirection: {
      readonly LEFT: 'left';
      readonly RIGHT: 'right';
      readonly DEFAULT: true;
      readonly NONE: false;
    };
  }

So the code

import { Column } from 'react-base-table'

const column = {
  align: Column.Alignment.CENTER
}

Will compile.

Alignment should likely be typed the same way, since Column.Alignment === Alignment.

Not sure exactly what the right solution is, since changing the types now is technically a breaking change to the types (Someone could currently be doing something like:

import { Column, Alignment } from 'react-base-table'

const myColumnAlignment: Alignment = Column.Alignment.CENTER

It's unclear to me if this is just happenstance, or it was actually intended.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions