文字列ユニオンタイプを定義して、変数を可能な文字列値の1つに制限できることを知っています。
type MyType = 'first' | 'second'
let myVar:MyType = 'first'
私は定数文字列からそのようなタイプを構築する必要があります、例えば:
const MY_CONSTANT = 'MY_CONSTANT'
const SOMETHING_ELSE = 'SOMETHING_ELSE'
type MyType = MY_CONSTANT | SOMETHING_ELSE
しかし、何らかの理由で機能しません。 MY_CONSTANT refers to a value, but it being used as a type here
。
TypeScriptが最初の例を許可するのに2番目の例を許可しないのはなぜですか? TypeScript 3.4.5を使用しています
@Titianの答えは正しくありません。 typeof
は常にstring
を返します。タイプの実際のチェックは行われません。
この場合はenumを使用することをお勧めします。例えば:
// Define enum.
enum myConstants {
MY_CONSTANT = 'my_constant',
SMTH_ELSE = 'smth_else'
}
// Use it in an interface for typechecking.
interface MyInterface {
myProp: myConstants
}
// Example of correct object - no errors.
let a: MyInterface = {
myProp: myConstants.MY_CONSTANT
}
// Incorrect value - TS reports an error.
let b: MyInterface = {
myProp: 'John Doe'
}