Я пытаюсь написать проект Javascript со строгой настройкой потока во всем мире. У меня также есть зависимость от big-integer
. Нет никаких предустановленных аннотаций потока в flow-typed
, к сожалению, и Google не предлагает ничего полезного в этой теме.
Как и многие пакеты JavaScript, big-integer
экспортирует одну функцию, которая обычно называется bigInt
. Это можно вызвать напрямую, например: bigInt(13)
, bigInt("134e134")
и т.д., Который создает объекты, которые являются большими целыми числами (я решил назвать тип возвращаемого значения этой функции "классом" под названием "BigInteger" "основываясь на документации, но я не думаю, что внутренности действительно используют классы, поскольку я считаю, что пакет вышел до ES6).
Это отлично работает для вывода функции, и я могу прикрепить методы к этому классу, и мы все хороши. Однако bigInt
сам имеет некоторые методы, например. bigInt.lcm(123, 234)
. Как я могу документировать это?
declare module "big-integer-types" {
declare class BigInteger {
add(addend: BigIntInput): BigInteger;
minus(subtractand: BigIntInput): BigInteger;
/* snip */
}
declare type BigIntInput = number | string | BigInteger;
declare type BigIntFn = (void | number | string | BigInteger) => BigInteger;
}
declare module "big-integer" {
import type { BigIntFn } from "big-integer-types";
declare export default BigIntFn
}
Это хорошо работает для полей больших целых чисел, например. для проверки типов bigInt(12).plus("144e53")
. Это здорово. Но это не включает bigInt.lcm(134, 1551)
, и это дает ошибку потока.
Альтернативой является объявление экспорта модуля big-integer
типа, который имеет определенные связанные функции. Например:
declare module "big-integer-types" {
declare type BigIntegerStaticMethods {
lcm(a: BigIntInput, b: BigIntInput): BigInteger,
/* snip */
}
declare type BigIntInput = number | string | BigInteger;
}
declare module "big-integer" {
import type BigIntegerStaticMethods from "big-integer-types";
declare export default BigIntegerStaticMethods
}
Это работает для статических методов, но я не знаю, как сказать, что может быть вызван "тип". Поэтому я не понимаю, как достичь обоих одновременно.
Это кажется странным, потому что функция с полями довольно распространена в javascript, и документация по потоку предполагает, что они потратили много усилий на то, чтобы система типа поддерживала javascript по мере ее использования. Поэтому я считаю, что для достижения этого есть синтаксис потока, я просто не мог понять, что это было, и не смог найти его в документах.