文字列の長さを2 つの方法(固定または範囲)で確認したいとします。
/* Fixed check */
check('abc', {length: 1}); // false
check('abc', {length: 3}); // true
/* Range check */
check('xyz', {minLength: 5, maxLength: 10}); // false
check('xyz', {minLength: 1, maxLength: 10}); // true
check('xyz', {minLength: 3, maxLength: 3}); // true
最初に次のように 2 つのインターフェイスを宣言しました。
interface StringFixed {
length: number;
}
interface StringRange {
minLength: number;
maxLength: number;
}
次に、関数を記述しようとします。
function check(value: string, schema: StringFixed): boolean;
function check(value: string, schema: StringRange): boolean;
function check(value: string, schema: StringFixed | StringRange): boolean {
if (typeof schema.length !== 'undefined') { // ERROR
// Fixed check
} else {
// Range check
}
}
しかし、TypeScript は関数の最初の行で ERROR を報告します。
TS2339: Property 'length' does not exist on type 'StringFix | StringRange'
私の質問は TypeScript でこれを行う方法ですか?