다음 코드 블록은 TypeScript 오류를 반환합니다.
'문자열'유형의 표현식은 '{id : string; 유형을 색인화하는 데 사용할 수 없기 때문에 요소가 암시 적으로'모든 '유형을 갖습니다. 경로 : 문자열; basename : 문자열; createdOn : 문자열; modifiedOn : 문자열; 내용 : 문자열; } '.
대괄호는 JavaScript (또는 //@ts-ignore
) 에서 잘 작동합니다 .
TypeScript에서 올바른 방법은 무엇입니까?
export interface Data {
[key: string]: {
id: string
path: string
basename: string
createdOn: string
modifiedOn: string
content: string
}
}
const data = _data as Data // _data is JSON
for (let item in data) {
for (let property in data[item]) {
console.log(property)
if (["createdOn", "modifiedOn"].includes(property)) {
data[item][property] = new Date(data[item][property])
}
}
}
다음은 JSON의 _data
모양입니다.
{
"readme": {
"id": "3905d7917f2b3429490b01cfb60d8f5b",
"path": "README.md",
"basename": "README.md",
"createdOn": "2020-02-26T12:29:26.181Z",
"modifiedOn": "2020-02-26T12:29:26.181Z",
"content": "<!--\nTitle: Privacy guides\nDescription: Privacy guides will be published shortly...\n-->\n\n# Privacy guides\n\nPrivacy guides will be published shortly...\n"
},
...
}
그 이유는 두 가지입니다.
property
갖는 string
대신 중첩 된 객체의 키로서 공지되는, 유형data[item][property] = new Date(...)
중첩 된 개체는 문자열 만 값으로 예상하기 때문에 어쨌든 오류를 반환합니다.유형을 적절히 사용 .includes()
하거나 .indexOf()
좁히지 않기 때문에 기본적으로 올바른 키를 반환하는 함수를 만들어야합니다. 이것은 공용체 유형에서 올바른 유형을 리턴 하는 유형 가드 역할을합니다 .
function hasPossibleDateAsValue(value: string): value is 'createdOn' | 'modifiedOn' {
return ["createdOn", "modifiedOn"].includes(value);
}
그런 다음 TypeScript에서 오류 / 경고를 표시하지 않고이를 수행 할 수 있습니다.
for (let item in data) {
for (let property in data[item]) {
if (hasPossibleDateAsValue(property)) {
data[item][property] = new Date(data[item][property]);
}
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다