IT이야기

Typecript에서 'padStart' 속성이 'string' 형식에 존재하지 않는다고 알려준다. 왜?

cyworld 2022. 3. 14. 21:22
반응형

Typecript에서 'padStart' 속성이 'string' 형식에 존재하지 않는다고 알려준다. 왜?

크롬 개발 도구를 입력하는 경우:

"1".padStart(2,0)

알겠다

"01"

하지만 내가 글을 쓸때

"1".padStart(2,0)

필자의 필적 프로젝트에서.

알겠다

Property 'padStart' does not exist on type 'string'.

Typecript는 왜 불평하는가?이 문제를 어떻게 해결하지?

padStart에 정의되어 있다.ES2017표준의당신은 형식에 대해 수용적 타이핑을 사용하도록 지시할 필요가 있다.ES2017를 으로하여 이 할 수 . 목표를 다음과 같이 설정하여 이 작업을 수행할 수 있다.ES2017런타임이 에 필요한 모든 언어 기능을 지원하는 경우ES2017(그것은 아마 집필 당시에는 해당되지 않을 것이다.)

은 또다 은은만 하는 이다.libs다음에 따라 런타임 객체에 대한 타이핑을 가져오는 옵션ES2017하지만 여전히 당신이 목표로 하는 언어 버전으로 압축한다.(런타임 자체는 지원해야 함)padStart는 어떤 것이다 활자는 어도 하다.

넌 할 수 있어tsconfig을 이용하여lib옵션:

"compilerOptions": {
    "target": "es2016",
    "lib": [
        "es2017",
        "dom"
        "scripthost"
    ],
    // ...

}

답변에서 lib vs target에 대한 자세한 내용을 읽어 보십시오.

TypeScript에서 String.prototype.padStart()를 인식하도록 하려면es2017당신의 도서관 목록에.tsconfig.json할 수 할 것이다. 이 도 있다 만약 그렇게 한다면, TypeScript는 모든 ES2017 기능을 사용할 수 있다고 가정할 것이며, 이는 당신이 원하는 것과 다를 수 있다.

Node.js와 같은 플랫폼은 항상 새로운 ECMAScript 언어 사양의 전체 기능 세트를 구현하지는 않으므로, 언어 기능이 존재한다고 확신하는 곳에 언어 기능만 추가하는 것이 더 안전하다.어떤 기능이 대상 플랫폼에서 지원되는지 잘 모를 경우 node.green 또는 MDNs 브라우저 호환성 목록과 같은 페이지에서 해당 기능을 찾아볼 수 있다.

padStart함수는 String 프로토타입의 일부분이므로 추가하기만 하면 된다.es2017.string당신 안에tsconfig.json:

{
  "compilerOptions": {
    "lib": ["es6", "es2017.string"],
    ...
  },
}

TypeScript는 기본적으로 당신의 transpiled 코드가 가능한 최악의 환경에서 실행될 것이라고 가정한다. 즉, ES5만 지원하는 브라우저에서 말이다.String.prototype.padStart ES2017에서만 지원되는 실험 기능이기 때문에, TypeScript는 런타임에 여기에서 준비가 될 것이라고 확신할 수 없다.

이 "최악의 사례"가 나타나지 않을 것을 알고 있다면(오래된 브라우저를 대상으로 하지 않거나 폴리필드를 사용하고 있지 않다), 다음과 같은 변경 사항 중 하나를 취할 수 있다.tsconfig.json:

  1. 전송 대상을 변경하십시오.따라서 소비자는 ES2017(또는 그 이상) 런타임을 갖도록 강제하지만, 더 이상의 노력이 필요하지 않다.이 경우, 설정target: "es2017".

  2. 사용 가능한 라이브러리 목록을 변경하십시오.이 경우 고객이 충분히 현대적일 것이라고 확신할 수 없다면, 당신이 사용하고 있는 ES2017 요소에 맞는 폴리필을 제공해야 한다.이 경우, 추가"es2017"의 정렬까지.lib매개 변수(비어 있었다면, 그러면lib: ["es2017"]).

참조URL: https://stackoverflow.com/questions/52293010/typescript-tells-me-property-padstart-does-not-exist-on-type-string-why

반응형