diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 0000000..8957991 --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es2017", + "strictNullChecks": true, + "noUnusedLocals": true, + "noUnusedParameters": true + }, + "include": ["*"] +} diff --git a/test/type_test.ts b/test/type_test.ts index 8ad692b..120ae0a 100644 --- a/test/type_test.ts +++ b/test/type_test.ts @@ -1,50 +1,58 @@ import ArSyncModel from './generated_typed_files/ArSyncModel' import { useArSyncModel, useArSyncFetch } from './generated_typed_files/hooks' +type IsEqual = [T, U] extends [U, T] ? true : false +function isOK(): T | undefined { return } +type IsStrictMode = string | null extends string ? false : true +isOK() + const [hooksData1] = useArSyncModel({ field: 'currentUser', query: 'id' }) -hooksData1!.id +isOK>() const [hooksData2] = useArSyncModel({ field: 'currentUser', query: { '*': true, foo: true } }) -hooksData2!.error.extraFields = 'foo' +isOK>() const [hooksData3] = useArSyncFetch({ field: 'currentUser', query: 'id' }) -hooksData3!.id +isOK>() const [hooksData4] = useArSyncFetch({ field: 'currentUser', query: { '*': true, foo: true } }) -hooksData4!.error.extraFields = 'foo' +isOK>() const data1 = new ArSyncModel({ field: 'currentUser', query: 'id' }).data! -data1.id +isOK>() const data2 = new ArSyncModel({ field: 'currentUser', query: ['id', 'name'] }).data! -data2.id; data2.name +isOK>() const data3 = new ArSyncModel({ field: 'currentUser', query: '*' }).data! -data3.id; data3.name; data3.posts +isOK>() const data4 = new ArSyncModel({ field: 'currentUser', query: { posts: 'id' } }).data! -data4.posts[0].id +isOK>() const data5 = new ArSyncModel({ field: 'currentUser', query: { posts: '*' } }).data! -data5.posts[0].id; data5.posts[0].user; data5.posts[0].body -const data6 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, comments: 'user' } } }).data! -data6.posts[0].id; data6.posts[0].user; data6.posts[0].comments[0].user +isOK>() +const data6 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, comments: 'user' } } }).data!.posts[0].comments[0] +isOK>() const data7 = new ArSyncModel({ field: 'currentUser', query: { name: true, poosts: true } }).data! -data7.error.extraFields = 'poosts' +isOK>() const data8 = new ArSyncModel({ field: 'currentUser', query: { posts: { id: true, commmments: true, titllle: true } } }).data! -data8.error.extraFields = 'commmments' -data8.error.extraFields = 'titllle' +isOK>() const data9 = new ArSyncModel({ field: 'currentUser', query: { '*': true, posts: { id: true, commmments: true } } }).data! -data9.error.extraFields = 'commmments' -const data10 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*' } } }).data! -data10[0].posts[0].comments[0].id +isOK>() +const data10 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*' } } }).data![0].posts[0].comments[0].id +isOK>() const data11 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*', commmments: true } } }).data! -data11.error.extraFields = 'commmments' -const data12 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: 'title' } } }).data! -data12.posts[0].title -const data13 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: ['id', 'title'] } } }).data! -data13.posts[0].title -const data14 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: { id: true, title: true } } } }).data! -data14.posts[0].title -const data15 = new ArSyncModel({ field: 'currentUser', query: { posts: ['id', 'title'] } } as const).data! -data15.posts[0].title +isOK>() +const data12 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: 'title' } } }).data!.posts[0] +isOK>() +const data13 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: ['id', 'title'] } } }).data!.posts[0] +isOK>() +const data14 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: { id: true, title: true } } } }).data!.posts[0] +isOK>() +const data15 = new ArSyncModel({ field: 'currentUser', query: { posts: ['id', 'title'] } } as const).data!.posts[0] +isOK>() const data16 = new ArSyncModel({ field: 'currentUser', query: { id: { field: 'name' }, name: { field: 'id' }, id2: { field: 'id' }, name2: { field: 'name' } } }).data! -data16.name = data16.id2 = 0 -data16.id = data16.name2 = 'name' -const data17 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, hoge: { field: 'comments', query: 'id' }, comments: { field: 'title' } } } }).data! -data17.posts[0].comments = 'title' -data17.posts[0].hoge[0].id = 0 +isOK>() +const data17 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, hoge: { field: 'comments', query: 'id' }, comments: { field: 'title' } } } }).data!.posts[0] +isOK>() +isOK>()