programing

Object.키(유형 스크립트의 숫자 사용)

muds 2023. 6. 15. 22:09
반응형

Object.키(유형 스크립트의 숫자 사용)

type Foo = { [key: number]: string }

const foo: Foo = { 100: 'foo', 200: 'bar' }
const sizes: number[] = Object.keys(foo)

제공:

Type 'string[]' is not assignable to type 'number[]

Typescript가 가정하는 이유string[]여기서 숫자 배열을 만드는 올바른 방법은 무엇입니까?

모든 키는 JavaScript의 문자열입니다. 그냥 사용합니다.map:

const sizes: number[] = Object.keys(foo).map(Number);

숫자 문자열에만 사용할 수 있습니다. 예를 들어 소수가 포함된 유럽 문자열일 경우에는 다음과 같습니다.NaN그리고 그것은 결코 좋게 끝나지 않습니다.

console.log(Number("10,7"));

또는 다음 유형 중 하나를 변경합니다.

const sizes: string[] = Object.keys(foo);

또는:

type Foo = { [key: string]: string };

객체 속성 이름은 항상 문자열입니다. 속성 이름을 즉시 숫자로 변환하려면map(Number):

const sizes: number[] = Object.keys(foo).map(Number);

자산 이름을 숫자로 변환할 수 없는 경우 다음을 얻을 수 있으므로 주의하십시오.NaN너의 사이즈 배열하여

Typescript가 문자열[?]을 가정하는 이유여기서 숫자 배열을 만드는 올바른 방법은 무엇입니까?

객체 속성 이름은 항상 문자열이기 때문에(또는 적절하게 설명하기 위해서는 항상 문자열에 강제됩니다), 따라서 기본 서명은 다음과 같이 가정합니다.string[]기본 유형으로, 인텔리센스에서 다음과 같이 제안합니다.

enter image description here

게다가 런타임에 이러한 키가 숫자가 될 것이라고 보장할 수는 없습니다.개체에 숫자 를 사용하도록 엄격하게 정의하는 유형을 정의해도 런타임에는 영향을 받지 않으므로 항상 값을 원하는 유형으로 안전하게 캐스트하는 것이 더 안전합니다.

const sizes: number[] = Object.keys(foo).map(Number); // beware of possible NaN here.

Object.keys항상 문자열 배열을 반환합니다.

const obj = { prop: 'prop' };
console.log(typeof Object.keys(obj)[0]);

키는 항상 문자열입니다. 배열 및 사용자의 경우와 같은 숫자 키도 마찬가지입니다.Fooobject - 문자열 키가 아닌 숫자 키를 사용하는 경우 문자열에 강제 적용됩니다.

제가 쓰겠습니다.[key: string]대신, 그것이 내부적으로 키의 유형이기 때문입니다.

Javascript Object에 숫자 키가 없습니다!모든 키는 문자열입니다.항상.다른 것을 값에 매핑하려면 다음을 사용해야 합니다.map.

var numObj = { 1:'one', 2:'two' };
var numObjKey = Object.keys(numObj);

console.log(typeof numObjKey[0]);
console.log(typeof numObjKey.map(Number)[0]);

언급URL : https://stackoverflow.com/questions/56804096/object-keys-using-numbers-in-typescript

반응형