programing

'string' 유형에 'replaceAll' 속성이 없습니다.

batch 2023. 4. 6. 21:21
반응형

'string' 유형에 'replaceAll' 속성이 없습니다.

사용하고 싶다replaceAll활자체와 각도 10으로 표시됩니다.

그러나 "string" 유형에는 "replaceAll" 속성이 없습니다.

코드는 다음과 같습니다.

let date="1399/06/08"
console.log(date.replaceAll('/', '_'))

출력: 13990608

이 기능을 표시하도록 타이프 스크립트를 수정하려면 어떻게 해야 합니까?

이러한 오타를 추가할 수 있어야 합니다.tsconfig.json.더하다"ES2021.String"로.lib안에서.compilerOptions.

다음으로 tsconfig는 다음과 같습니다.

{
    ...,
    "compilerOptions": {
        ...,
        "lib": [
          ...,
          "ES2021.String"
        ]
    }
}

replaceAll메서드는 내부에 정의되어 있습니다.lib.es2021.string.d.ts다음과 같습니다.

interface String {
    /**
     * Replace all instances of a substring in a string, using a regular expression or search string.
     * @param searchValue A string to search for.
     * @param replaceValue A string containing the text to replace for every successful match of searchValue in this string.
     */
    replaceAll(searchValue: string | RegExp, replaceValue: string): string;

    /**
     * Replace all instances of a substring in a string, using a regular expression or search string.
     * @param searchValue A string to search for.
     * @param replacer A function that returns the replacement text.
     */
    replaceAll(searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string;
}

RegExp 및 글로벌 플래그를 사용하여 문제를 해결할 수 있습니다.글로벌 플래그를 통해replace모든 경우에 실행되다

"1399/06/08".replace(/\//g, "_") // "1399_06_08"

문서에서:

2020년 8월 현재replaceAll()메서드는 Firefox에서 지원되지만 Chrome에서는 지원되지 않습니다.그것은 크롬 85에서 사용할 수 있게 될 것이다.

한편, 여기서 다른 여러 가지 방법을 찾을 수 있습니다.

미래의 독자를 위한 스크린샷:

여기에 이미지 설명 입력

그냥 이 기능을 사용하세요.

    let date="1399/06/08"
    
    console.log(date.split('/').join('_'))

파일을 생성할 수 있습니다.

myOwnTypes.d.ts

각도 프로젝트의 루트에 다음 코드를 추가합니다.

interface String {
    replaceAll(input: string, output : string): any;
}

그러면 문자열이 이 속성을 가지고 있음을 타이프스크립트에 알 수 있습니다.

이제 replaceAll은 Chrome 및 Firefox에서 지원되지만 사용자의 요구에 맞는지 확인하기 위해 항상 캐니유스를 확인하는 것이 좋습니다.

https://caniuse.com/?search=replaceAll

이 방법으로 업보트가 유효한 경우, 이 stackoverflow 어카운트부터 시작해 주시면 감사하겠습니다.

이는 TypeScript가 현재 JavaScript 버전보다 새로운 메서드를 인식하지 못하기 때문입니다. String.replaceAll()정의되어 있습니다.

를 추가해야 합니다.libcompilerOptions,에서tsconfig.json파일.

가치lib다음 중 하나여야 합니다.["ES2021"], 또는 구체적으로 문자열 입력["ES2021.String"].

에 다음 추가tsconfig.json파일:

{
  ...
  "compilerOptions": {
    "lib": ["ES2021"]
  ...
}

Chrome은 replaceAll을 지원하므로 안심하고 사용할 수 있습니다.그러나 타이프스크립트는 여전히 오류를 발생시키므로 이 장애를 극복하기 위해 임의의 문자열을 입력할 수 있습니다.

const date: any ="1399/06/08"
console.log(date.replaceAll('/','_'))

MDN Web Docs에 따르면

"글로벌 검색을 수행하고 대체하려면gswitch in regular expression."을 클릭합니다.

따라서 다음을 수행할 수 있습니다.

const date="1399/06/08"
const forwardSlashRegex = /(\/)/g;
console.log(date.replace(forwardSlashRegex, '_'));

그러면 모든 슬래시가 자동으로 언더스코어로 대체됩니다.그리고 꼭 보관해 주세요./g정규식 끝의 글로벌인디케이터를 사용하면 JS는 순슬래시가 발생하는 모든 장소를 치환할 것을 알 수 있습니다.

regex 인디케이터의 사용 방법에 대한 자세한 내용은 다음 매우 유용한 가이드를 참조하십시오.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

이 문제가 해결되지 않는 경우는, 이것을 tsconfig.json 에 추가합니다.

{
    ...,
    "compilerOptions": {
        ...,
        "lib": [
          ...,
          "esnext.string"
        ]
    }
}

에서는 을, 을, 을, 을, 을, 을, 을, 을 .target에 귀속시키다.compilerOptions.

{
"compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "ES2021", // add this line to use ES2021
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false,
    "noUnusedLocals": false,
    "paths": {
        "@/*": ["src/*"],
        "@auth/*": ["src/auth/*"],
        "@aws/*": ["src/aws/*"],
        "@common/*": ["src/common/*"],
        "@conig/*": ["src/conig/*"],
        "@schemas/*": ["src/schemas/*"],
    }
}}

RegExp를 사용하여 모두 교체할 수 있는 간단한 대안입니다.

let subject = '1399/06/08';

let substring = '/';
let replacement = '_';

let newSubject = subject.replace(new RegExp(substring, 'g'), replacement);

console.log(newSubject);

서브스트링과 치환을 문자열 입력으로 하는 함수로 만들 수 있어 실용적입니다.

저의 활용 사례는 각도 "교체" 파이프를 만드는 것이었습니다.

언급URL : https://stackoverflow.com/questions/63616486/property-replaceall-does-not-exist-on-type-string

반응형