Articles of flowtype

Flowtype:打包有types和无types的用户?

我有一个共享npm包与几个js应用程序消耗的一些业务逻辑。 在src中有es6 +stream源文件,然后在lib中创build了vanilla js文件,而包的main被设置为lib / index.js,它导出应该可见的东西。 我花了几天时间使用streamtypes重写了这个包,这些代码整理了一些代码,还帮助检测了一些问题。 它很好,types检查,testing通过。 Babel删除所有的stream动位,因此需要包的客户端仍然可以获取js中的纯文件,并且工作正常。 但是现在我想允许这个包的客户端(可选)获取函数的types签名,并检查他们的调用是否正确input。 我可以写一个声明文件,但看起来很愚蠢,因为这些types已经在原始的pre-babel源代码中。 同时,我不能仅仅提供这个来源,因为有些客户可能不会使用stream量或者巴贝尔。 我宁愿没有人希望types必须知道确切的源文件path,并且必须require('my-package/src/the-piece-i-want') 有没有一种标准的方式来编写一个包的stream程,使得require('my-package')既适用于纯节点用户也适用于babel + flow用户的types检查? 如果不是,那么这个问题的其他人又在做什么呢?

streamtypes和合并json对象

假设以下types的代码(例如使用lodash或者像这里显式的): function extend(base, overwrite) { for (var key in overwrite) base[key] = overwrite[key]; return base; } var first = extend({ a: 1 }, { b: 2 }); var second = extend({ c: 3 }, { d: 4 }); console.log(first.a + first.b + second.c + second.d); 我怎样才能解释FlowType,这实际上是罚款?

我如何注释Flow的这个function

我有这个JS函数在我使用Flow( https://github.com/facebook/flow ) // @flow static promiseWrapper(fn, …args) { return new Promise( async function(resolve, reject) { try { await fn(…args); resolve(); } catch (e) { reject(e); } } ) } 我怎么去注释这个?

FlowType包装获取而不会丢失默认types的注释

我想要做的就是包装fetch函数来处理一些类似调用.json()的fetch样板文件。 但问题是,如果我包装fetch函数,在一个函数与我自己的注释,我失去了很多的types安全,因为我的types将永远不会像默认情况下与stream来的具体。 所以我试图利用存在types(*)和typeof来使Flow保持默认的注释 // Imported as f because importing as "fetch" // overwrites all of Flow's default type info about fetch import f from 'node-fetch' export const fetchJSON: typeof fetch = (url: *, opts: *): * => f(url, opts).then(r => r.json()) export const post: typeof fetchJSON = (url: *, opts: *): * => fetchJSON(url, { […]

你应该发布你的stream式文件夹到NPM吗?

我想知道是否和在什么条件下,你应该发布你的包flow-typed文件夹NPM。 也许(和我一直在想的)答案从来没有,应用程序开发人员自己使用streamtypes,但flow-typed install可能只是为自己声明的依赖关系提供定义,而不是包内的依赖关系。 所以简而言之,如果你的软件包有非对等streamtypes的依赖关系,我应该发布我的flow-typed文件夹,或者我应该npmignore它?

types的stream量提示没有被巴贝尔剥夺

我有一个使用UI组件的自定义“主题”的React.JS项目。 这个主题还提供了构build脚本(webpackconfiguration,babelconfiguration等)。 我想在这个项目中开始使用Flow。 我安装了所需的npm包,并将flow添加到babel的预设中,然后将props = {mytestprop: string}到我的一个React类中。 Webpack成功地编译了我的代码,但是types提示没有被剥离! 当然,浏览器不能执行这个代码 – 当我尝试运行它时,会引发ReferenceError: string is not defined 。 .babelrc的当前预设列表是: ["es2015", "react", "stage-2", "flow"] 。 我确定这是babel使用的实际列表,因为如果我删除前3个预设中的任何一个,编译将失败。 你有什么想法可能导致这种行为剥离streamtypes?

扩展Flow中的快速请求类

我正在使用Flow构buildnodeJS应用程序,而且我需要扩展Express Request的默认快速注释以适应其他字段,例如.user和.session。 不幸的是,当我尝试这样做,并创build接受这个新的请求types的中间件时,Flow吓了一跳,我不知道我做错了什么。 从stream式inputexpression的原始代码是: declare class express$Request extends http$IncomingMessage mixins express$RequestResponseBase { …. } declare type express$Middleware = ((req: express$Request, res: express$Response, next: express$NextFunction) => mixed) | ((error: ?Error, req: express$Request, res: express$Response, next: express$NextFunction) => mixed); 所以我想我只是扩展快速请求,然后我所有的中间件都应该与新的属性,对不对? declare class web$Request extends express$Request { user: any, isAuthenticated(): boolean, session: { loginForwardUrl: ?string, }, } const […]

如何从npm发布的模块导入stream注释,types和接口

我已通过testingvalidation了可以从npm发布的模块中导入stream注释,types和接口的两种模式。 在下面我使用下面的模块名称: 模块A:定义注释,types和接口 模块B:依赖于模块A并希望对它进行types检查,并使用它的注释,types和接口。 模式1 模块A 对于types和接口都使用export type语法: type IComplex … interface IMutableComplex … export type {IComplex, IMutableComplex} 将所有*.js文件复制为*.js.flow 。 例如在package.json有如下的内容: "main": "lib/index.js", "scripts": { "prepublish": "mkdir -p lib && for f in $(find src/ -iname *.js | cut -c5-) ; do cp src/$f lib/$f.flow; done", … }, 发布模块 模块B 简单地用npm i –S module-A声明依赖关系npm i […]

试图启动Atom / Nuclide时没有发现stream动

我正在为使用Atom IDE的react-native应用程序工作。 打开Atom时出现错误 我用npm命令安装了babel-cli和babel-preset-flow 。 npm install –save-dev babel-cli babel-preset-flow 现在,当我重新启动Atom然后它显示相同的警告给我“试图启动时没有findstream”。 任何人都可以帮助我如何解决它。 我已经按照这个https://medium.com/react-native-training/getting-started-with-react-native-and-flow-d40f55746809stream量服务器运行良好,但我如何增加stream量到primefaces,所以我可以摆脱从这个https://i.stack.imgur.com/7jJVI.png