symbol-sdk-typescript-javascript icon indicating copy to clipboard operation
symbol-sdk-typescript-javascript copied to clipboard

Wrong TS types

Open cleverocheck opened this issue 4 years ago • 3 comments

Expected behavior and actual behavior

The project has a file, where is the wrong typing (group field) subject to the use of this model in this file (toTransactionStatus method). It says that the field must be of type enum, but in fact it is one of the enum values

Steps to reproduce the problem

import { RepositoryFactoryHttp } from 'symbol-sdk'

const repositoryFactory = new RepositoryFactoryHttp('http://wolf.importance.jp:3000')
const transactionStatusRepository = repositoryFactory.createTransactionStatusRepository()
transactionStatusRepository.getTransactionStatus('30F03BB1E2D422C19E1DEBFFB21C046EF8CD9FB32F5FF7C1A9235792162D20B1').subscribe(transactionStatus => {
    console.log(transactionStatus.group) // check console value and type in TS
})

Specifications like the version of the project, operating system, or hardware

  • sdk version: 1.0.2

cleverocheck avatar Dec 05 '21 10:12 cleverocheck

Hi @IgnatLomkov , I couldn't reproduce the issue. Could you show the logs?

fboucquez avatar Dec 11 '21 10:12 fboucquez

Hi, @Fboucquez, you probably do not fully understand me. If you do not consider the use of transactionStatus.group in other files, then there is correct typing. Code in this comment gives me "confirmed". But type TransactionGroupEnum cannot be applied in other parts of the sdk adequately. Let's say I want to perform such an action:

import { TransactionGroupEnum } from 'symbol-openapi-typescript-fetch-client'
import { RepositoryFactoryHttp } from 'symbol-sdk'

const repositoryFactory = new RepositoryFactoryHttp('http://wolf.importance.jp:3000')
const transactionRepository = repositoryFactory.createTransactionRepository()
const transactionStatusRepository = repositoryFactory.createTransactionStatusRepository()
transactionStatusRepository.getTransactionStatus('30F03BB1E2D422C19E1DEBFFB21C046EF8CD9FB32F5FF7C1A9235792162D20B1').subscribe(transactionStatus => {
    console.log(transactionStatus.group) // will output "confirmed"
    if(transactionStatus.group === TransactionGroupEnum.Failed) return
    transactionRepository.getTransaction('30F03BB1E2D422C19E1DEBFFB21C046EF8CD9FB32F5FF7C1A9235792162D20B1', transactionStatus.group) // TS error, but "Failed" excluded
        .subscribe(fullTransaction => console.log(fullTransaction))
})

There may of course be such a workaround, but it's still not what you want to use:

import { TransactionGroupEnum } from 'symbol-openapi-typescript-fetch-client'
import { RepositoryFactoryHttp, TransactionGroup } from 'symbol-sdk'

const repositoryFactory = new RepositoryFactoryHttp('http://wolf.importance.jp:3000')
const transactionRepository = repositoryFactory.createTransactionRepository()
const transactionStatusRepository = repositoryFactory.createTransactionStatusRepository()
transactionStatusRepository.getTransactionStatus('30F03BB1E2D422C19E1DEBFFB21C046EF8CD9FB32F5FF7C1A9235792162D20B1').subscribe(transactionStatus => {
    console.log(transactionStatus.group) // will output "confirmed"
    if (transactionStatus.group === TransactionGroupEnum.Failed) return
    transactionRepository.getTransaction('30F03BB1E2D422C19E1DEBFFB21C046EF8CD9FB32F5FF7C1A9235792162D20B1', transactionStatus.group as unknown as TransactionGroup)
        .subscribe(fullTransaction => console.log(fullTransaction))
})

The same typing inconsistency exists in other parts of the sdk

cleverocheck avatar Dec 11 '21 21:12 cleverocheck

Thanks @IgnatLomkov , you are right. We should split the TransactionGroupEnum with and without Failed. Failed value is not a valid value when searching or loading transactions.

fboucquez avatar Dec 13 '21 13:12 fboucquez