유형 ts (7053)에 '문자열'유형의 매개 변수가있는 색인 서명이 없습니다.

user8380672

이 코드 줄에서 아래 오류가 계속 발생합니다 oldUniforms[key] = tempUniforms[key];.. 동일한 유형의 객체에 대한 깊은 사본을 생성하기 때문에 이것이 작동하지 않는 이유를 이해할 수 없습니다.

오류:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'UpdatedUniformsType'.
  No index signature with a parameter of type 'string' was found on type 'UpdatedUniformsType'.ts(7053)

암호:

    type UpdatedUniformsType = {
        u_BlockDia?: number;
        u_CamPos?: [number, number];
    };

    const oldUniforms: UpdatedUniformsType = {
        u_BlockDia: 16,
        u_CamPos: [0, 0],
    };

    function setOldUniforms(updatedUniforms: UpdatedUniformsType) {
        // Deep copy of updatedUniforms
        const tempUniforms: UpdatedUniformsType = JSON.parse(JSON.stringify(updatedUniforms));

        // Update oldUniforms using the deep copy
        Object.keys(tempUniforms).forEach((key) => {
            oldUniforms[key] = tempUniforms[key];
        });
    }
jcalz

컴파일러는 모르는 Object.keys(tempUniforms)생산합니다 에만 예상 키를. TypeScript의 객체 유형은 개방 / 확장 가능 하며 폐쇄 / 정확 하지 않습니다 . 유형의 객체가 있으면 UpdatedUniformsType에서 일어나는 일에 대해 의미있게 말할 수 있지만 추가 속성이 있는지 여부는 알 수 없습니다. 그래서 A는 반환 타이프 라이터에, 아닌 . 자세한 내용은 이 질문 과 답변을 참조하십시오.u_BlockDiau_CamPosObject.keys(obj)string[]Array<keyof typeof obj>

추가 키가 없다고 확신하는 경우 (또는 추가 키가있을 때 어떤 일이 발생하는지 신경 쓰지 않는 경우) 유형 어설 션사용 하여 컴파일러 가 반환 할 것임을 알릴 수 있습니다 .Object.keys(tempUniforms)Array<keyof UpdatedUniformsType>

(Object.keys(tempUniforms) as Array<keyof UpdatedUniformsType>)
    .forEach(<K extends keyof UpdatedUniformsType>(key: K) => {
        oldUniforms[key] = tempUniforms[key];
    });

또한 forEach()콜백을 제네릭 함수 로 만들어 oldUniforms[key] = tempUniforms[key]컴파일러가 할당 UpdatedUniformsType[K]을 자체 할당으로 인식 하도록해야했습니다. 그렇게하지 않으면 컴파일러는 TS3.5에 도입 된 건전성 향상 으로 인해 할당이 안전하다는 것을 인식하지 못합니다 . 자세한 내용은 이 질문 과 답변을 참조하십시오.

코드에 대한 플레이 그라운드 링크

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

'[] 유형에서'string '유형의 매개 변수가있는 색인 서명이 없습니다. iCommits'.ts (7053)

분류에서Dev

'문자열'유형의 매개 변수가있는 색인 서명이 '유형에 없습니다.

분류에서Dev

Typescript- '문자열'유형의 매개 변수가있는 색인 서명이 없습니다.

분류에서Dev

'{}'유형에서 'string'유형의 매개 변수가있는 색인 서명이 없습니다.

분류에서Dev

'Object'유형에 'string'유형의 매개 변수가있는 색인 서명이 없습니다.

분류에서Dev

'any'유형의 인수는 'never'유형의 매개 변수에 할당 할 수 없습니다 .ts (2345)

분류에서Dev

Visual Studio에서 '문자열'유형의 인수를 '숫자'typescript 유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

사용중인 데이터 유형에 문제가 있습니까? (const char *의 인수는 LPCTSTR 유형의 매개 변수와 호환되지 않습니다.)

분류에서Dev

TypeScript- '문자열'유형의 인수는 '문자열'유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

Typescript 오류 인수 '문자열 | number '는'never '유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

Typescript 오류 : TS2345 : '{테마 : 문자열; jsonFile : 문자열; 출력 : 문자열; }; } '은'Options '유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

TS 오류를 연속화합니다. ' "long"'유형의 인수는 'TextDataTypeOptions'유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

C4477 : 'fprintf': 형식 문자열 '% s'에는 'char *'유형의 인수가 필요하지만 가변 인수 1에는 'int *'유형이 있습니다.

분류에서Dev

'PassportStatic'유형의 인수는 'Passport'유형의 매개 변수에 할당 할 수 없습니다. '사용'속성 유형이 호환되지 않습니다.

분류에서Dev

TS2345 수정 : 'HTMLElement'유형의 인수는 'HTMLInputElement'유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

매개 변수가있는 SQL Like 연산자에서 데이터 유형을 판별 할 수 없습니다.

분류에서Dev

유형 'HTMLElement | null '은'Element '유형의 매개 변수에 할당 할 수 없습니다. 'null'유형은 'Element'유형에 할당 할 수 없습니다 .ts (2345)

분류에서Dev

오류 TS2345 : 'Map <String, boolean>'유형의 인수는 'IterableShim <[String, boolean]>'유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

오류 TS2345 : '{클러스터 : 문자열 유형의 인수; 암호화 됨 : 부울; } '은'Options '유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

'문자열 | 문자열 [] | ParsedQs | ParsedQs [] '는'string '유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

react-select typescript 문제-일반 유형 'ValueType'에는 2 개의 유형 인수가 필요합니다 .ts (2314)

분류에서Dev

react-select typescript 문제-일반 유형 'ValueType'에는 2 개의 유형 인수가 필요합니다 .ts (2314)

분류에서Dev

코드를 별도의 파일로 리팩토링 할 때 "TS2345 : 유형의 인수를 유형의 매개 변수에 지정할 수 없습니다."

분류에서Dev

C ++에서 문자 비교- "char"유형의 인수가 "const char * 유형의 매개 변수와 호환되지 않습니다.

분류에서Dev

오류 : 'bar <int> &'유형의 매개 변수에 대한 기본 인수에 'bar <int>'유형이 있습니다.

분류에서Dev

서명 오버로드 : '부울'유형의 인수는 'true'유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

typescript : Element의 프로토 타입에는 '_BaseOption'유형에 색인 서명이 없기 때문에 암시 적으로 '모든'유형이 있습니다.

분류에서Dev

"문자열 유형의 인수가 사용자 정의 유형의 매개 변수에 할당 할 수 없음"에 대한보기 흉한 문제

분류에서Dev

'unknown'유형의 인수는 'string'유형의 매개 변수에 할당 할 수 없습니다.

Related 관련 기사

  1. 1

    '[] 유형에서'string '유형의 매개 변수가있는 색인 서명이 없습니다. iCommits'.ts (7053)

  2. 2

    '문자열'유형의 매개 변수가있는 색인 서명이 '유형에 없습니다.

  3. 3

    Typescript- '문자열'유형의 매개 변수가있는 색인 서명이 없습니다.

  4. 4

    '{}'유형에서 'string'유형의 매개 변수가있는 색인 서명이 없습니다.

  5. 5

    'Object'유형에 'string'유형의 매개 변수가있는 색인 서명이 없습니다.

  6. 6

    'any'유형의 인수는 'never'유형의 매개 변수에 할당 할 수 없습니다 .ts (2345)

  7. 7

    Visual Studio에서 '문자열'유형의 인수를 '숫자'typescript 유형의 매개 변수에 할당 할 수 없습니다.

  8. 8

    사용중인 데이터 유형에 문제가 있습니까? (const char *의 인수는 LPCTSTR 유형의 매개 변수와 호환되지 않습니다.)

  9. 9

    TypeScript- '문자열'유형의 인수는 '문자열'유형의 매개 변수에 할당 할 수 없습니다.

  10. 10

    Typescript 오류 인수 '문자열 | number '는'never '유형의 매개 변수에 할당 할 수 없습니다.

  11. 11

    Typescript 오류 : TS2345 : '{테마 : 문자열; jsonFile : 문자열; 출력 : 문자열; }; } '은'Options '유형의 매개 변수에 할당 할 수 없습니다.

  12. 12

    TS 오류를 연속화합니다. ' "long"'유형의 인수는 'TextDataTypeOptions'유형의 매개 변수에 할당 할 수 없습니다.

  13. 13

    C4477 : 'fprintf': 형식 문자열 '% s'에는 'char *'유형의 인수가 필요하지만 가변 인수 1에는 'int *'유형이 있습니다.

  14. 14

    'PassportStatic'유형의 인수는 'Passport'유형의 매개 변수에 할당 할 수 없습니다. '사용'속성 유형이 호환되지 않습니다.

  15. 15

    TS2345 수정 : 'HTMLElement'유형의 인수는 'HTMLInputElement'유형의 매개 변수에 할당 할 수 없습니다.

  16. 16

    매개 변수가있는 SQL Like 연산자에서 데이터 유형을 판별 할 수 없습니다.

  17. 17

    유형 'HTMLElement | null '은'Element '유형의 매개 변수에 할당 할 수 없습니다. 'null'유형은 'Element'유형에 할당 할 수 없습니다 .ts (2345)

  18. 18

    오류 TS2345 : 'Map <String, boolean>'유형의 인수는 'IterableShim <[String, boolean]>'유형의 매개 변수에 할당 할 수 없습니다.

  19. 19

    오류 TS2345 : '{클러스터 : 문자열 유형의 인수; 암호화 됨 : 부울; } '은'Options '유형의 매개 변수에 할당 할 수 없습니다.

  20. 20

    '문자열 | 문자열 [] | ParsedQs | ParsedQs [] '는'string '유형의 매개 변수에 할당 할 수 없습니다.

  21. 21

    react-select typescript 문제-일반 유형 'ValueType'에는 2 개의 유형 인수가 필요합니다 .ts (2314)

  22. 22

    react-select typescript 문제-일반 유형 'ValueType'에는 2 개의 유형 인수가 필요합니다 .ts (2314)

  23. 23

    코드를 별도의 파일로 리팩토링 할 때 "TS2345 : 유형의 인수를 유형의 매개 변수에 지정할 수 없습니다."

  24. 24

    C ++에서 문자 비교- "char"유형의 인수가 "const char * 유형의 매개 변수와 호환되지 않습니다.

  25. 25

    오류 : 'bar <int> &'유형의 매개 변수에 대한 기본 인수에 'bar <int>'유형이 있습니다.

  26. 26

    서명 오버로드 : '부울'유형의 인수는 'true'유형의 매개 변수에 할당 할 수 없습니다.

  27. 27

    typescript : Element의 프로토 타입에는 '_BaseOption'유형에 색인 서명이 없기 때문에 암시 적으로 '모든'유형이 있습니다.

  28. 28

    "문자열 유형의 인수가 사용자 정의 유형의 매개 변수에 할당 할 수 없음"에 대한보기 흉한 문제

  29. 29

    'unknown'유형의 인수는 'string'유형의 매개 변수에 할당 할 수 없습니다.

뜨겁다태그

보관