javascript - Varsle når en TypeScript-type og en konstant har samme navn i samme modul?
Jeg har
import type { SomeType } from '../../types/Project';
// import { SomeType } from '../../types/Project'; tried this too
const SomeType = ({ s }: { s: SomeType }): JSX.Element => {
return <>${s}</>;
};
i Project.ts har jeg
export type SomeType = JSX.Element;
Hvorfor viser ikke TS-linteren noen advarsler, men den vil kaste en feil:
Identifier 'SomeType' has already been declared.Jeg trodde typer og variabler kan eksistere samtidig med samme navn?
Eksempel: https://codesandbox.io/s/objective-glade-y94j58?file=/src/App.tsx
Svar #1
Mens løsningen @Joel ga er en mulig løsning, tror jeg ikke den korrekt svarer på spørsmålet ved å si «Nei».
Ta en titt på svarene her
Svaret på spørsmålet ditt er JA, du kan ha en type og en variabel med samme navn siden TS-typing fjernes ved kompilering (i motsetning til variabler).
Det du leter etter er følgende ESLint-regel: no-shadow
// .eslintrc.js
module.exports = {
"rules": {
...<your_other_rules>,
// Note: you must disable the base rule as it can report incorrect errors
"no-shadow": "off",
"@typescript-eslint/no-shadow": ["off", { ignoreTypeValueShadow: true, ignoreFunctionTypeParameterNameValueShadow: true }]
}
};
Svar #2
Enkelt svar, nei
Selv om det erklæres som en type, må SomeType ha en tilgjengelig identifikator (altså et navn som ikke allerede er i bruk i det nåværende området).
Hvis du ikke kan endre navnet på typen eller på variabelen, kan du gi den et alias.
import type { SomeType as SameTypeWithOtherName } from '../../types/Project';
const SomeType = ({ s }: { s: SameTypeWithOtherName }): JSX.Element => {
return <>${s}</>;
};
