정의한 일반적인 기능형에 적용하고 기능을 할당

0

질문

저는 정의하고 사용하는 일반적인 기능은 다음과 같다:

const fetchData = <T>(): T[] => {
  const arr: T[] = []
  // if stuff push to arr
  return arr
}

const emptyStringArray = fetchData<string>();

그러나,내가 실제 시나리오,나는 많은 params 고 싶은 별도 typings 와 기능을 할당합니다.

데도 다음과 같다:

type IFetchData = <T>() => T[]

const fetchData2: IFetchData = () => {
  const arr: T[] = []
  // if stuff push to arr
  return arr
}

const emptyStringArray = fetchData2<string>();

그러나,지금 함수 정의하지 않는 인식 T 로 사용할 수 있는 유형입니다.

을 찾을 수 없는 이름을'T'.

을 많이 봤의 다른 구성에서 어디를 넣어 <T>하지만 아무것도 작동하는 것을 보이지 않는 어떤 아이디어가?

데 TS 놀이터


관련 질문

typescript typescript-generics
2021-11-24 02:12:27
3

최고의 응답

2

IFetchData 을 반환 입력을 위해 당신,그래서 작품을 생략의 일반적인서 fetchData2 기능을 반환합니다. 는 다음과 같은 일하는가?

type IFetchData = <T>() => T[]
const fetchData2: IFetchData = () => {
  return [];
}
2021-11-24 02:18:56

가깝지만,이상적으로 나는 할 수 있을 유지하는 일반적인에서 정의합니다. 그것은 간체에서 만들려고 작은 예를 들어,하지만 실제로 만들기에 초기 어레이와 밀 obects 을 업데이트 예
KyleMit

Hmm,에 대한 액세스 권한이 필요한 경우의 일반적인 내부 fetchData2 그것처럼 보인다는 접근 방식과 비슷한 것입니다 당신의 초기 방법(없 IFetchData: const fetchData2 = <T>() => { const arr: T[] = []; return arr;}
Nick
1

먼저,이 기능:

const fetchData = <T,>(): T[] => {
    const arr: T[] = []
    arr.push(2) // error
    arr.push('str') // error

    return arr
}

은 사용하기 매우 어렵습니다.

이후 아닌의 인수와 관련이 없 TTS 당신을 허용하지 않습니다 push 모든 값을 arr. 물론 사용할 수 있습니다 주장형 as지만,그것은 매우 안전하지 않은:

const fetchData = <T,>(): T[] => {
    const arr: T[] = []
    arr.push('str' as any as T) // error

    return arr
}

const emptyStringArray = fetchData<number>(); // number[]
emptyStringArray[0].toExponential() // runtime error

관련 질문/답변, 나의 문서

대답은 쉽고 간단하다:그것은 불가능 이 경우에는 별도의 T 에서 기능이 정의없이 해결 방법이 있습니다.

여기에서 당신은 가장 간단한 방법:

const fetchData = <T,>() => {
  const arr: T[] = []
  return arr
}

그러나,당신이 원하는 변형 배열 안 fetchData이 함수는 서명이 유용하지 않습니다. 이 기능은 허용되지 않도 arr. 당신이 할 수있는 모든 돌아 arr 없이 돌연변이가 있습니다.

하기 위해서 돌연변이도록 만들 높은 순서 함수 호출하는 동안 fetchData 제공하는 명시적 일반적인 논쟁:

type FetchData = <T>() => T[]
const fetchData: FetchData = () => []

const higherOrder = <T,>(elem: T) => {
  const arr = fetchData<T>();
  arr.push(elem)

  return arr
}



const test = higherOrder('str'); // ok, string[]
const test2 = higherOrder(42); // ok, number[]

놀이터

2021-11-24 08:54:18
0

수 당신이 시도하지?

type IFetchData = <T>() => T[]
const fetchData2: IFetchData = <T>() => {
  return [];
}
2021-11-24 08:13:59

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................