Skip to content

Commit e9f5dbb

Browse files
committed
strict type compare test
1 parent c27fd76 commit e9f5dbb

File tree

2 files changed

+49
-31
lines changed

2 files changed

+49
-31
lines changed

test/tsconfig.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"compilerOptions": {
3+
"module": "commonjs",
4+
"target": "es2017",
5+
"strictNullChecks": true,
6+
"noUnusedLocals": true,
7+
"noUnusedParameters": true
8+
},
9+
"include": ["*"]
10+
}

test/type_test.ts

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,58 @@
11
import ArSyncModel from './generated_typed_files/ArSyncModel'
22
import { useArSyncModel, useArSyncFetch } from './generated_typed_files/hooks'
33

4+
type IsEqual<T, U> = [T, U] extends [U, T] ? true : false
5+
function isOK<T extends true>(): T | undefined { return }
6+
type IsStrictMode = string | null extends string ? false : true
7+
isOK<IsStrictMode>()
8+
49
const [hooksData1] = useArSyncModel({ field: 'currentUser', query: 'id' })
5-
hooksData1!.id
10+
isOK<IsEqual<typeof hooksData1, { id: number } | null>>()
611
const [hooksData2] = useArSyncModel({ field: 'currentUser', query: { '*': true, foo: true } })
7-
hooksData2!.error.extraFields = 'foo'
12+
isOK<IsEqual<typeof hooksData2, { error: { extraFields: 'foo' } } | null>>()
813
const [hooksData3] = useArSyncFetch({ field: 'currentUser', query: 'id' })
9-
hooksData3!.id
14+
isOK<IsEqual<typeof hooksData3, { id: number } | null>>()
1015
const [hooksData4] = useArSyncFetch({ field: 'currentUser', query: { '*': true, foo: true } })
11-
hooksData4!.error.extraFields = 'foo'
16+
isOK<IsEqual<typeof hooksData4, { error: { extraFields: 'foo' } } | null>>()
1217

1318
const data1 = new ArSyncModel({ field: 'currentUser', query: 'id' }).data!
14-
data1.id
19+
isOK<IsEqual<typeof data1, { id: number }>>()
1520
const data2 = new ArSyncModel({ field: 'currentUser', query: ['id', 'name'] }).data!
16-
data2.id; data2.name
21+
isOK<IsEqual<typeof data2, { id: number; name: string | null }>>()
1722
const data3 = new ArSyncModel({ field: 'currentUser', query: '*' }).data!
18-
data3.id; data3.name; data3.posts
23+
isOK<IsEqual<typeof data3, { id: number; name: string | null; posts: {}[]; do_not_call_after_destroyed: any }>>()
1924
const data4 = new ArSyncModel({ field: 'currentUser', query: { posts: 'id' } }).data!
20-
data4.posts[0].id
25+
isOK<IsEqual<typeof data4, { posts: { id: number }[] }>>()
2126
const data5 = new ArSyncModel({ field: 'currentUser', query: { posts: '*' } }).data!
22-
data5.posts[0].id; data5.posts[0].user; data5.posts[0].body
23-
const data6 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, comments: 'user' } } }).data!
24-
data6.posts[0].id; data6.posts[0].user; data6.posts[0].comments[0].user
27+
isOK<IsEqual<typeof data5, {
28+
posts: {
29+
id: number; user: {}; title: string | null; body: string | null;
30+
do_not_call_after_destroyed: any; comments: {}[]; my_comments: {}[]
31+
}[]
32+
}>>()
33+
const data6 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, comments: 'user' } } }).data!.posts[0].comments[0]
34+
isOK<IsEqual<typeof data6, { user: {} }>>()
2535
const data7 = new ArSyncModel({ field: 'currentUser', query: { name: true, poosts: true } }).data!
26-
data7.error.extraFields = 'poosts'
36+
isOK<IsEqual<typeof data7, { error: { extraFields: 'poosts' } }>>()
2737
const data8 = new ArSyncModel({ field: 'currentUser', query: { posts: { id: true, commmments: true, titllle: true } } }).data!
28-
data8.error.extraFields = 'commmments'
29-
data8.error.extraFields = 'titllle'
38+
isOK<IsEqual<typeof data8, { error: { extraFields: 'commmments' | 'titllle' } }>>()
3039
const data9 = new ArSyncModel({ field: 'currentUser', query: { '*': true, posts: { id: true, commmments: true } } }).data!
31-
data9.error.extraFields = 'commmments'
32-
const data10 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*' } } }).data!
33-
data10[0].posts[0].comments[0].id
40+
isOK<IsEqual<typeof data9, { error: { extraFields: 'commmments' } }>>()
41+
const data10 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*' } } }).data![0].posts[0].comments[0].id
42+
isOK<IsEqual<typeof data10, number>>()
3443
const data11 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*', commmments: true } } }).data!
35-
data11.error.extraFields = 'commmments'
36-
const data12 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: 'title' } } }).data!
37-
data12.posts[0].title
38-
const data13 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: ['id', 'title'] } } }).data!
39-
data13.posts[0].title
40-
const data14 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: { id: true, title: true } } } }).data!
41-
data14.posts[0].title
42-
const data15 = new ArSyncModel({ field: 'currentUser', query: { posts: ['id', 'title'] } } as const).data!
43-
data15.posts[0].title
44+
isOK<IsEqual<typeof data11, { error: { extraFields: 'commmments' } }>>()
45+
const data12 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: 'title' } } }).data!.posts[0]
46+
isOK<IsEqual<typeof data12, { title: string | null }>>()
47+
const data13 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: ['id', 'title'] } } }).data!.posts[0]
48+
isOK<IsEqual<typeof data13, { id: number; title: string | null }>>()
49+
const data14 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: { id: true, title: true } } } }).data!.posts[0]
50+
isOK<IsEqual<typeof data14, { id: number; title: string | null }>>()
51+
const data15 = new ArSyncModel({ field: 'currentUser', query: { posts: ['id', 'title'] } } as const).data!.posts[0]
52+
isOK<IsEqual<typeof data15, { id: number; title: string | null }>>()
4453

4554
const data16 = new ArSyncModel({ field: 'currentUser', query: { id: { field: 'name' }, name: { field: 'id' }, id2: { field: 'id' }, name2: { field: 'name' } } }).data!
46-
data16.name = data16.id2 = 0
47-
data16.id = data16.name2 = 'name'
48-
const data17 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, hoge: { field: 'comments', query: 'id' }, comments: { field: 'title' } } } }).data!
49-
data17.posts[0].comments = 'title'
50-
data17.posts[0].hoge[0].id = 0
55+
isOK<IsEqual<typeof data16, { id: string | null; name: number; id2: number; name2: string | null }>>()
56+
const data17 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, hoge: { field: 'comments', query: 'id' }, comments: { field: 'title' } } } }).data!.posts[0]
57+
isOK<IsEqual<typeof data17.hoge, { id: number }[]>>()
58+
isOK<IsEqual<typeof data17.comments, string | null>>()

0 commit comments

Comments
 (0)