summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Zhineng <[email protected]>2025-07-23 21:15:21 +0800
committerLi Zhineng <[email protected]>2025-07-23 21:15:21 +0800
commitb2584c0e805476a971d24e22350caf3875b42dd0 (patch)
tree258f2679b2d2aa85802ee6284e5faf0ad45f562b
parent2f6bfbcaff5b35d9fd14563f1e2892dbf040646e (diff)
downloadwave-b2584c0e805476a971d24e22350caf3875b42dd0.tar.gz
wave-b2584c0e805476a971d24e22350caf3875b42dd0.zip
test types
-rw-r--r--jest.config.ts3
-rw-r--r--package.json3
-rw-r--r--src/index.ts25
-rw-r--r--tests/index.test-d.ts32
-rw-r--r--tests/index.test.ts (renamed from src/index.test.ts)2
-rw-r--r--tsconfig.json3
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"]
}