재귀 감소 기능에서 Typescript 오류를 수정하는 방법

에스더 쿠안

저는 Typescript를 처음 접했고 JSON stringify의 매우 기본적인 구현을 작성했습니다. 코드는 예상대로 작동하지만 내 유형은 중첩 배열을 재귀 적으로 문자열 화하는 부분에서 약간 엉망입니다. 어떤 도움을 주시면 감사하겠습니다 : D

여기에 TS 플레이 그라운드에 대한 링크가 있으며 거기에 내가 얻는 모든 오류가 표시됩니다. 놀이터 링크

type ValidJSON = ValidJSONObject | string | number | boolean | JsonArray

interface JsonArray extends Array<string | number | boolean | Date | ValidJSONObject | JsonArray> { }

interface ValidJSONObject {
    [x: string]: string | number | boolean | Date | JsonArray
}

export const stringify = (input: ValidJSON) :string => {
   if (input === null)
    return 'null'
  else if (input.constructor === String)
    return '"' + input.replace(/"|\n/g, (x:string) =>  x === '"' ? '\\"' :'\\n') + '"'
  else if (input.constructor === Number)
    return String(input)
  else if (input.constructor === Boolean)
    return input ? 'true' : 'false'
  else if (input.constructor === Array)
    return '[' + input.reduce((acc, v) => {
      if (v === undefined)
        return [...acc, 'null']
      else
        return [...acc, stringify(v)]
    }, []).join(',') + ']'
  else if (input.constructor === Object)
    return '{' + Object.keys(input).reduce((acc, k) => {
      if (input[k] === undefined)
        return acc
      else
        return [...acc, stringify(k) + ':' + stringify(input[k])]
    }, []).join(',') + '}'
  else
    return '{}'
};
tatsuya kanemoto

누산기 유형을 추론 할 수없는 경우 reduce 메소드에 유형 인수가 필요합니다.

예를 들면. 다음 코드의 누산기는 배열의 유형을 알려주지 않습니다.

[1,2,3].reduce((acc, cur) => ([...acc, cur+'']), [])

따라서 다음과 같이 유형 인수를 전달해야합니다.

[1,2,3].reduce<string[]>((acc, cur) => ([...acc, cur+'']), [])

또한 모든 오류를 수정했습니다. 다음과 같이 변경됩니다.

  1. ValidJSON 유형 정의에 날짜 유형을 추가했습니다.
  2. string[]reduce 메소드의 유형 인수에 추가되었습니다 .
  3. 입력을 다음으로 캐스팅 (input as ValidJSONObject)

생성 된 자바 스크립트 코드는 귀하의 코드와 동일합니다.
도움이 되길 바랍니다!

운동장

type ValidJSON = ValidJSONObject | string | number | boolean | Date | JsonArray

interface JsonArray extends Array<string | number | boolean | Date | ValidJSONObject | JsonArray> { }

interface ValidJSONObject {
    [x: string]: string | number | boolean | Date | JsonArray
}

export const stringify = (input: ValidJSON) :string => {
   if (input === null)
    return 'null'
  else if (input.constructor === String)
    return '"' + input.replace(/"|\n/g, (x:string) =>  x === '"' ? '\\"' :'\\n') + '"'
  else if (input.constructor === Number)
    return String(input)
  else if (input.constructor === Boolean)
    return input ? 'true' : 'false'
  else if (input.constructor === Array)
    return '[' + input.reduce<string[]>((acc, v) => {
      if (v === undefined)
        return [...acc, 'null']
      else
        return [...acc, stringify(v)]
    }, []).join(',') + ']'
  else if (input.constructor === Object)
    return '{' + Object.keys(input).reduce<string[]>((acc, k: keyof ValidJSONObject) => {
      if ((input as ValidJSONObject)[k] === undefined)
        return acc
      else
        return [...acc, stringify(k) + ':' + stringify((input as ValidJSONObject)[k])]
    }, []).join(',') + '}'
  else
    return '{}'
};

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java 메소드에서 재귀를 감지하는 방법

분류에서Dev

재귀 감소 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

PHP에서 재귀를 수정하는 방법?

분류에서Dev

재귀 적 홍수 채우기 세분화 오류를 수정하는 방법은 무엇입니까?

분류에서Dev

Typescript가 대소 문자를 구분하는 오타로 가져 오기 경로 오류를 감지하도록하는 방법은 무엇입니까?

분류에서Dev

Typescript에서 재귀 일반 클래스를 수행하는 방법은 무엇입니까?

분류에서Dev

ANTLR4에서 왼쪽 재귀 오류를 제거하기 위해 문법을 수정하는 방법은 무엇입니까?

분류에서Dev

재귀를 사용하여 집합에서 가능한 모든 요소 조합을 선택하는 방법

분류에서Dev

ionic 3에서 Typescript 오류를 수정하는 방법? index.d.ts

분류에서Dev

XPath를 사용하여 XML에서 재귀 요소를 검색하는 방법

분류에서Dev

재귀 함수의 요소를 지정하는 방법은 무엇입니까?

분류에서Dev

lxml에서 특정 요소와 하위 요소를 재귀 적으로 얻는 방법은 무엇입니까?

분류에서Dev

Matlab에서 재귀 함수를 메모하는 방법

분류에서Dev

Haxe에서 상호 재귀 함수를 작성하는 방법

분류에서Dev

해결 방법 : Node.js를 실행하는 데 사용되는 현재 플랫폼에서 기능 감시를 재귀 적으로 사용할 수 없습니다.

분류에서Dev

이진 트리에서 요소의 발생 수를 가져 오는 재귀 방법

분류에서Dev

소켓 io 설정에서 구문 오류를 수정하는 방법

분류에서Dev

파이썬 "재귀"함수에서 전역 변수를 재설정하는 방법은 무엇입니까?

분류에서Dev

재귀 방법 (2)에 의해 분할 될 수있는 요소를 카운팅

분류에서Dev

재귀 Racket 함수에서 런타임을 최적화하여 목록의 최대 요소를 결정하는 방법은 무엇입니까?

분류에서Dev

onChange 수정자를 사용하면서 스테퍼에서 증가 및 감소 기능을 사용하는 방법

분류에서Dev

jQuery에서 현재 요소를 감지하는 방법은 무엇입니까?

분류에서Dev

기수 정렬을 재귀 적으로 구현-마지막에 요소를 인쇄하는 방법은 무엇입니까?

분류에서Dev

회문 소수에 대한 재귀 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

튜플 요소를 기반으로 재귀를 수행하는 방법은 무엇입니까?

분류에서Dev

파이썬에서 재귀 오류를 처리하는 방법은 무엇입니까?

분류에서Dev

재귀 프로 시저에서 오류를 처리하는 방법은 무엇입니까?

분류에서Dev

TypeScript에서 재귀 바이너리 트리를 만드는 방법은 무엇입니까?

분류에서Dev

pyspark에서 단조로운 감소를 감지하는 방법

Related 관련 기사

  1. 1

    Java 메소드에서 재귀를 감지하는 방법

  2. 2

    재귀 감소 함수를 작성하는 방법은 무엇입니까?

  3. 3

    PHP에서 재귀를 수정하는 방법?

  4. 4

    재귀 적 홍수 채우기 세분화 오류를 수정하는 방법은 무엇입니까?

  5. 5

    Typescript가 대소 문자를 구분하는 오타로 가져 오기 경로 오류를 감지하도록하는 방법은 무엇입니까?

  6. 6

    Typescript에서 재귀 일반 클래스를 수행하는 방법은 무엇입니까?

  7. 7

    ANTLR4에서 왼쪽 재귀 오류를 제거하기 위해 문법을 수정하는 방법은 무엇입니까?

  8. 8

    재귀를 사용하여 집합에서 가능한 모든 요소 조합을 선택하는 방법

  9. 9

    ionic 3에서 Typescript 오류를 수정하는 방법? index.d.ts

  10. 10

    XPath를 사용하여 XML에서 재귀 요소를 검색하는 방법

  11. 11

    재귀 함수의 요소를 지정하는 방법은 무엇입니까?

  12. 12

    lxml에서 특정 요소와 하위 요소를 재귀 적으로 얻는 방법은 무엇입니까?

  13. 13

    Matlab에서 재귀 함수를 메모하는 방법

  14. 14

    Haxe에서 상호 재귀 함수를 작성하는 방법

  15. 15

    해결 방법 : Node.js를 실행하는 데 사용되는 현재 플랫폼에서 기능 감시를 재귀 적으로 사용할 수 없습니다.

  16. 16

    이진 트리에서 요소의 발생 수를 가져 오는 재귀 방법

  17. 17

    소켓 io 설정에서 구문 오류를 수정하는 방법

  18. 18

    파이썬 "재귀"함수에서 전역 변수를 재설정하는 방법은 무엇입니까?

  19. 19

    재귀 방법 (2)에 의해 분할 될 수있는 요소를 카운팅

  20. 20

    재귀 Racket 함수에서 런타임을 최적화하여 목록의 최대 요소를 결정하는 방법은 무엇입니까?

  21. 21

    onChange 수정자를 사용하면서 스테퍼에서 증가 및 감소 기능을 사용하는 방법

  22. 22

    jQuery에서 현재 요소를 감지하는 방법은 무엇입니까?

  23. 23

    기수 정렬을 재귀 적으로 구현-마지막에 요소를 인쇄하는 방법은 무엇입니까?

  24. 24

    회문 소수에 대한 재귀 함수를 작성하는 방법은 무엇입니까?

  25. 25

    튜플 요소를 기반으로 재귀를 수행하는 방법은 무엇입니까?

  26. 26

    파이썬에서 재귀 오류를 처리하는 방법은 무엇입니까?

  27. 27

    재귀 프로 시저에서 오류를 처리하는 방법은 무엇입니까?

  28. 28

    TypeScript에서 재귀 바이너리 트리를 만드는 방법은 무엇입니까?

  29. 29

    pyspark에서 단조로운 감소를 감지하는 방법

뜨겁다태그

보관