有没有办法让 Typescript 不允许这样做?
type TwoItemTuple = [string, string];
const uh: TwoItemTuple = ['a', 'b', 'a']
如果不是,背后的原因是什么?
最佳答案
你也可以尝试这样的事情:
type OnlyTwo<T1, T2 = T1> = [T1, T2] & {
0: T1;
1: T2;
2?: never;
}
var x: OnlyTwo<number> = [1, 1]; // Okay;
var y: OnlyTwo<number> = [1, 1, 1]; // Error
var z: OnlyTwo<number> = [1, 1, undefined]; // Error
var o: OnlyTwo<number> = [1]; // Error
var b: OnlyTwo<number> = [1, 1, 1, 1] // Error
var s1: OnlyTwo<number, string> = [1, "a"] // Okay
var s1: OnlyTwo<number, string> = [1, "a", 1] // Error
据我所知,对于该类型,唯一可以分配给它的是一个数组文字,其中恰好有两个正确类型的项目。
一个问题是您可以使用 push
和 pop
修改这些数组,这会将实际值变成不再符合类型的值。谨慎使用。
关于typescript - 为什么 Typescript 会忽略超出已知大小的元组内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48122528/