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[]
기본 유형으로, 인텔리센스에서 다음과 같이 제안합니다.
게다가 런타임에 이러한 키가 숫자가 될 것이라고 보장할 수는 없습니다.개체에 숫자 키를 사용하도록 엄격하게 정의하는 유형을 정의해도 런타임에는 영향을 받지 않으므로 항상 값을 원하는 유형으로 안전하게 캐스트하는 것이 더 안전합니다.
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]);
키는 항상 문자열입니다. 배열 및 사용자의 경우와 같은 숫자 키도 마찬가지입니다.Foo
object - 문자열 키가 아닌 숫자 키를 사용하는 경우 문자열에 강제 적용됩니다.
제가 쓰겠습니다.[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
'programing' 카테고리의 다른 글
TypeScript에서 Emplicit이 없을 때 빈 배열이 "any[]"로 유추되는 이유는 무엇입니까?거짓일 때 "절대[]가 아니다"라고 추론되는 것은 사실입니까? (0) | 2023.06.15 |
---|---|
Vue - 프로그래밍 방식으로 생성된 구성 요소가 vuex 저장소를 사용할 수 있도록 하는 올바른 방법 (0) | 2023.06.15 |
일련의 번호에서 누락된 번호를 확인하는 방법은 무엇입니까? (0) | 2023.06.15 |
자바에서 사용자 정의 유형을 포함하는 오라클 저장 프로시저를 어떻게 호출합니까? (0) | 2023.06.15 |
NSMutableDictionary에서 setObject:forKey:와 setValue:forKey:의 차이점은 무엇입니까? (0) | 2023.06.15 |