자바스크립트 및 타입스크립트에 대한 코딩 컨벤션을 주도적으로 다루게 될 기회가 생겨서 자료를 정리해보았습니다.
다른 자료들을 찾아보시면 훨씬 더 많은 컨벤션 내용을 확인하실 수 있습니다.
저는 TypeScript 컨벤션으로 분류될 수 있을만한 내용만 간단하게 추려보았습니다.
대부분의 내용은 JavaScript 코딩 컨벤션과 관련된 내용이 많았습니다. 📚
Interface
)PascalCase
를 사용합니다.
I
를 접두어로 사용하지 않습니다.
I
를 붙이는 경우가 많았는데 현재는 비관습적인 이유로 사용하지 않습니다.// Bad
interface IFoo {
}
// Good
interface Foo {
}
Type
)PascalCase
를 사용합니다.
멤버는 camelCase
를 사용합니다.
// Bad
type car {
ModelInfo: string;
}
// Good
type Car {
modelInfo: string;
}
Type
vs Interface
Union
이나 Intersection
이 필요할 때 Type을 사용합니다.
type Foo = number | { someProperty: number }
extends
또는 implements
를 사용하고 싶을 때는 Interface
를 사용합니다.
interface Foo {
foo: string;
}
interface FooBar extends Foo {
bar: string;
}
class X implements FooBar {
foo: string;
bar: string;
}
namespace
)PascalCase
를 사용합니다.
PascalCase
를 사용하기 때문에 동일하게 사용합니다.// Bad
namespace foo {
}
// Good
namespace Foo {
}
enum
PascalCase
를 사용합니다.
enum
의 멤버에는 PascalCase
를 사용합니다.
// Bad
enum color {
red
}
// Good
enum Color {
Red
}
any
vs unknown
unknown
타입을 사용합니다.any
, unknown
타입 모두 아무때나 사용할 수 있지만 unknown
타입은 사용하는 쪽에서 방어처리를 해서 안전하게 사용이 가능합니다.any
타입은 타입스크립트를 쓰는 의미가 없게 되버릴 수 있습니다.function prettyPrint(x: unknown): string {
if (Array.isArray(x)) {
return "[" + x.map(prettyPrint).join(", ") + "]"
}
if (typeof x === "string") {
return `"${x}"`
}
if (typeof x === "number") {
return String(x)
}
return "etc."
}
x
를 any
로 했을 경우 map()
, join()
을 사용할 수 있는데 unknown
일 때 x
가 배열인 경우에만 map()
, join()
을 사용할 수 있도록 강제해줍니다.
null
vs undefined
type
으로 구조를 암시할 수 있도록 합니다.// Bad
let foo = { x: 123, y: undefined }
// Good
let foo = { x: number, y?: number } = { x: 123 }
일반적으로 undefined
를 사용합니다.
return undefined
null
이나 undefined
값을 갖는 객체는 truthy
하게 검사합니다.
// Bad
if (error === null)
// Good
if (error)
null
이나 undefined
를 체크할 때 ===
혹은 !==
를 사용하지 않고 ==
혹은 !=
를 사용합니다.
null
이나 undefined
에는 작동하지만 다른 fasly
값들 ('', 0, false
)에는 작동하지 않습니다.// Bad
if (error !== null)
// Good
if (error != null)