diff options
| -rw-r--r-- | jest.config.ts | 3 | ||||
| -rw-r--r-- | package.json | 3 | ||||
| -rw-r--r-- | src/index.ts | 25 | ||||
| -rw-r--r-- | tests/index.test-d.ts | 32 | ||||
| -rw-r--r-- | tests/index.test.ts (renamed from src/index.test.ts) | 2 | ||||
| -rw-r--r-- | tsconfig.json | 3 |
6 files changed, 56 insertions, 12 deletions
diff --git a/jest.config.ts b/jest.config.ts index 1c6e6c1..838b86c 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,8 +1,7 @@ import type { Config } from 'jest' const config: Config = { - preset: 'ts-jest', - roots: ['<rootDir>/src'] + preset: 'ts-jest' } export default config diff --git a/package.json b/package.json index 0e2ccfe..e4f0298 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,12 @@ "author": "Zhineng Li", "type": "module", "main": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { "build": "tsc", "test": "jest", "test:watch": "jest --watch", + "test:types": "tsd --files tests/**/*.test-d.ts", "format": "prettier --write --cache ." }, "devDependencies": { @@ -31,6 +33,7 @@ "prettier": "3.6.2", "ts-jest": "^29.4.0", "ts-node": "^10.9.2", + "tsd": "^0.32.0", "typescript": "^5.8.3" } } diff --git a/src/index.ts b/src/index.ts index 04a1870..de0ad68 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,9 @@ type QueryString = Record<string, string> type HttpMethod = WechatMiniprogram.RequestOption['method'] type RequestTask = WechatMiniprogram.RequestTask | WechatMiniprogram.UploadTask type RequestData = Record<string, unknown> -type ResponseData = WechatMiniprogram.RequestSuccessCallbackResult['data'] +type ResponseData = + | WechatMiniprogram.RequestSuccessCallbackResult['data'] + | WechatMiniprogram.UploadFileSuccessCallbackResult['data'] type MiddlewareNext<T extends ResponseData> = ( request: PendingRequest ) => RequestPromise<Response<SuccessCallbackResult<T>, T>> @@ -87,7 +89,7 @@ class PendingRequest { #data: RequestData = {} - #middlewares: Middleware<any>[] = [] + #middlewares: Middleware<ResponseData>[] = [] method(method: HttpMethod) { const request = this.#clone() @@ -192,7 +194,12 @@ class PendingRequest { return this.#throughMiddlewares(request)( this.#dispatchUpload(option.name, option.filePath) - ) + ) as RequestPromise< + Response< + WechatMiniprogram.UploadFileSuccessCallbackResult, + WechatMiniprogram.UploadFileSuccessCallbackResult['data'] + > + > } #dispatchUpload(name: string, filePath: string) { @@ -232,10 +239,12 @@ class PendingRequest { } } - #send<T extends ResponseData>(): RequestPromise< - Response<SuccessCallbackResult<T>, T> - > { - return this.#throughMiddlewares<T>(this)(this.#dispatchRequest<T>) + #send<T extends ResponseData>() { + return this.#throughMiddlewares<T>(this)( + this.#dispatchRequest<T> + ) as RequestPromise< + Response<WechatMiniprogram.RequestSuccessCallbackResult<T>, T> + > } #dispatchRequest<T extends ResponseData>(request: PendingRequest) { @@ -274,7 +283,7 @@ class PendingRequest { return (handler: MiddlewareNext<T>) => this.#middlewares.reduceRight( (next: MiddlewareNext<T>, middleware) => (request: PendingRequest) => - middleware(request, next), + (middleware as Middleware<T>)(request, next), handler )(request) } diff --git a/tests/index.test-d.ts b/tests/index.test-d.ts new file mode 100644 index 0000000..52df93c --- /dev/null +++ b/tests/index.test-d.ts @@ -0,0 +1,32 @@ +import { expectType } from 'tsd' +import { Client } from '../src' + +interface User { + name: string +} + +;async () => { + const response = await Client.new().get('http://example.com') + expectType<WechatMiniprogram.RequestSuccessCallbackResult['data']>( + response.data() + ) +} + +;async () => { + const response = await Client.new().get<User>('http://example.com') + expectType<User>(response.data()) +} + +;async () => { + const response = await Client.new().get<string>('http://example.com/string') + expectType<string>(response.data()) +} + +;async () => { + const response = await Client.new().upload({ + url: 'http://example.com', + filePath: '/tmp/foo.txt', + name: 'file' + }) + expectType<string>(response.data()) +} diff --git a/src/index.test.ts b/tests/index.test.ts index 8d73700..c8e0a64 100644 --- a/src/index.test.ts +++ b/tests/index.test.ts @@ -1,4 +1,4 @@ -import { Factory, Response } from './' +import { Factory, Response } from '../src' describe('HTTP Client', () => { beforeEach(() => { diff --git a/tsconfig.json b/tsconfig.json index d5c5877..6b51bae 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,5 +15,6 @@ "./node_modules/miniprogram-api-typings" ] }, - "include": ["src/**/*.ts"] + "include": ["src"], + "exclude": ["*.test.ts", "*.test-d.ts"] } |
