react-base-table icon indicating copy to clipboard operation
react-base-table copied to clipboard

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

Open saperdadsk opened this issue 4 years ago • 2 comments

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.

saperdadsk avatar Apr 28 '21 20:04 saperdadsk

it's definitely not intended and the type definition in types/index.d.ts is wrong I think, I was completely new to TS when bringing typings into this package

nihgwu avatar Jun 10 '21 01:06 nihgwu

image

nihgwu avatar Jun 13 '21 22:06 nihgwu