Comments (6)
Hi @UnknownHero,
Have you got a code snippet showing the problem you are having?
from asyncawait.
I get your basic example - https://github.com/yortus/asyncawait#basic-example
Remove lodash using.
And rewrite using bluebird
//references to node and asyncawait .d.ts
import Promise = require('bluebird');
import fs = require('fs');
import path = require('path');
import async = require('asyncawait/async');
import await = require('asyncawait/await');
var fsPromise = Promise.promisifyAll(fs);
// Return the number of files in the given directory
var countFiles = async (function(dir) {
var files = await (fsPromise.readdirSync(dir));
return 1;
});
countFiles(__dirname)
.then (function (num) { console.log('There are ' + num + ' files in ' + __dirname); })
.catch(function (err) { console.log('Something went wrong: ' + err); });
pachage.json
{
"name": "",
"version": "0.0.1",
"dependencies": {
"asyncawait" : "0.7.4",
"bluebird" : "*",
}
}
Compile command:
tsc src/app.ts --sourceMap --outDir build/ --module commonjs
Compiler version: 1.4.1.0
Output:
src/app.ts(13,34): error TS2339: Property 'readdirSync' does not exist on type 'Object'.
from asyncawait.
The problem is with this line:
var fsPromise = Promise.promisifyAll(fs);
The promisifyAll()
function adds a bunch of properties to the object passed to it, so TypeScript cannot statically determine what the resulting object will look like. So in bluebird.d.ts
the author decided to make it return just Object
, rather that the same type as the argument (in this case fs
). Therefore, fsPromise
has the type Object
, which doesn't have a method called readdirSync
. It may have been better if they typed the return value as any
, to prevent exactly the problem you are having.
You can override the typing easily though, just replace the line with:
var fsPromise: any = Promise.promisifyAll(fs);
and you should be good to go.
from asyncawait.
Thank you.
Also, i change declaration
https://github.com/yortus/asyncawait/blob/master/src/typings/bluebird/bluebird.d.ts#L416
static promisifyAll(target: Object): Object;
to:
static promisifyAll<T>(target: T): T;
and my code compile .
But IDE show me error anyway.
Can write something like that ? :
var fsPromise: fs = Promise.promisifyAll(fs);
or
var fsPromise: typeof fs = Promise.promisifyAll(fs);
I want autocomplete for Intellij Idea or Visual Studio.
from asyncawait.
I suspect you mean to use the readdirAsync
function added by promisifyAll()
, not the readdirSync
that comes directly from the fs
module. The -Sync
version is blocking so you dont need await
for that one.
That's why I suggested typing fsPromise
as any
. TypeScript cannot work out at compile time what the shape of promisifyAll
's return value will be at run time. So unfortunately, you won't be able to get intellisense for the -Async
functions added by promisifyAll()
, which are the ones you want to use.
Alternatively, you can promisify just the functions you want, like so:
var readdirAsync = Promise.promisify(fs.readdir);
in which case readdirAsync
will have type Function
.
In general, the 'shape' of the return values of functions like promisify
and promisifyAll
are polymorphic and depend on the runtime shape of their arguments. TypeScript has no runtime insight, so it can't work out these types, hence the fallback to more general static types like Object
and Function
.
from asyncawait.
Thank you so much !
from asyncawait.
Related Issues (20)
- Fibers are more flexible(?) HOT 18
- Use with ES6 classes #2 HOT 1
- Not working on nw.js HOT 1
- Error: await functions, yield functions, and value-returning suspendable functions. HOT 1
- setTimout example? HOT 2
- Unexpected token function HOT 6
- Fiber not running HOT 1
- why so long time require this two packages? HOT 1
- Extra parentheses? HOT 2
- fibers v1.0.16 dependency breaks node 4.x HOT 1
- Using a for loop HOT 2
- await inside an awaited function
- Stuck within await()... HOT 2
- Installation issue on node version 9.0.0 HOT 1
- Using forEach with Callbacks function
- Not an issue, just a thank you. HOT 1
- asyncawait fails to build on Ubuntu 16.04.4 LTS HOT 3
- Examples in typescript HOT 1
- Upgrade fibers package for nodejs 10.x or 12.x HOT 6
- Await behavior in non Async function or normal function HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from asyncawait.