Частный метод в определениях Typescript (React)

Это просто общий вопрос, который беспокоил меня какое-то время.

У меня есть компонент React, в котором есть как частные, так и общедоступные методы. Предположим, у меня есть компонент:

import React from 'react';
import { CRComponent } from '../CRComponent';

export interface Props {
  className?: string;
  type?: string;
}

class AlertItem extends CRComponent<Props> {
  public render() {
    return (
      ///// Some render
    );
  }

  private getClassNames() {
    ///some logic
  }

  private mapAlertTypeIcon() {
    ///Some logic
  }
}

export default AlertItem;

Когда я создаю файл определения машинописного текста, создается следующий файл:

import { CRComponent } from '../CRComponent';
interface Props {
  className?: string;
}
declare class AlertItem extends CRComponent<Props> {
  private getClassNames;
  private mapAlertTypeIcon;
  public render(): JSX.Element;
}
export default AlertItem;

Я намеренно удалил опору type из файла .d.ts, чтобы пользователь не мог использовать ее как внутреннюю.

Теперь, когда я публикую этот файл .d.ts, все методы членов публикуются в файле .d.ts, включая частные. Для этого класса методов относительно меньше. Предположим, у меня есть большой компонент, тогда количество частных методов может быть огромным.

Теперь в библиотеке компонентов таких компонентов будет много.

Когда я их публикую, основной размер пакета связан с этими файлами. Итак, мой вопрос в том, нужно ли сохранять закрытые члены в файлах .d.ts или я могу просто игнорировать их, поскольку у пользователя все равно не будет к ним доступа?

Я пытался найти ответы, но не нашел. Так что помощь будет оценена.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 774
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Частный метод меняет, можете ли вы создать замещаемый тип, например, объявление Example предотвращает совпадение типа с нашим конкретным классом (независимо от того, добавляем ли мы частный член идентификации!)

declare class Example {
    private identity: string;
    public doSomething(): string;
}

class ConcreteExample {
    private identity: string = 'id';

    doSomething() { 
        return 'done';
    }
}

function passMeExample(input: Example) {

}

// ConcreteExample is not allowable!
passMeExample(new ConcreteExample());

Если вы удалите частные члены, это изменит поведение проверки типа:

declare class Example {
    public doSomething(): string;
}

class ConcreteExample {
    private identity: string = 'id';

    doSomething() { 
        return 'done';
    }
}

function passMeExample(input: Example) {

}

// OK!
passMeExample(new ConcreteExample());

Поэтому важно иметь в виду, что при удалении этих закрытых членов поведение будет отличаться. Классы не будут действовать так, как если бы они были включены.

Это потому, что ConcreteExample не имеет идентичного имени Example?

realisation 30.04.2019 22:46

TypeScript является структурно типизированным, а не номинально типизированным, но вы обнаружите, что структуры не совпадают, если частный член добавлен к целевому типу (это не проблема, если частный член добавлен к предоставленному типу).

Fenton 02.05.2019 16:17

Другие вопросы по теме