我遇到了一个用例,我需要定义一个只有string
或number
的数组,但只能是一种类型。
例如:
let a = [1, 2, 3];
let b = ['a', 'b', 'c'];
// but cannot be
let c = ['a', 1];
1.如何声明这个变量的类型?
我的想法是
let a : Array<number>|Array<string>;
1.如何将纯数字和纯字符串数组转换为数字数组?
let a : Array<number>|Array<string>;
// how to cast a to b : Array<number>?
PS:这是我遇到的情况
function f(arr: Date[] | number[]) {
if (arr[0] instanceof Date) {
g(arr[0]);
g(arr[1]); // compile error in this line
g(arr[1] as Date); // Do not use any type assertions.eslint@typescript-eslint/consistent-type-assertions
}
}
function g(e: Date): void {
}
因此如何避免这些错误或警告并获得一个日期数组?
1条答案
按热度按时间h7appiyu1#
你可以使用一个类型 predicate 来定义你自己的类型保护。这里我写了一个函数
isDateArray
来检查给定的值是否是一个日期数组。Playground