TypeScript是否有一种方法可以静态检查空字符串?是否有一种方法可以静态地要求将非空字符串传递给函数?
let fn = function(a:string){
};
fn('');
或者let a = '';
fn(a);
TS 能帮助我们吗?
TypeScript是否有一种方法可以静态检查空字符串?是否有一种方法可以静态地要求将非空字符串传递给函数?
let fn = function(a:string){
};
fn('');
或者let a = '';
fn(a);
TS 能帮助我们吗?
我认为这是你只使用输入系统(而不是拥有一个'nonEmptyString'类)所能获得的最接近的结果。
type nonEmptyString = never; // Cannot be implicitly cast to
function isNonEmptyString(str: string): str is nonEmptyString {
return str && str.length > 0; // Or any other logic, removing whitespace, etc.
}
测试一下:
let fn = function(a: nonEmptyString) {
}
let someStr = '';
if (isNonEmptyString(someStr)) {
fn(someStr); // Valid
} else {
fn(someStr); // Compile error
}
不幸的是,由于nonEmptyString
是never
类型,所以您最终会得到疣,这意味着您需要将nonEmptyString
显式转换回string
.
let fn = function(a: nonEmptyString) {
let len = a.length; // Invalid
let len2 = (<string>a).length; // Valid
let str = a + 'something else'; // Valid (str is now typed as string)
}
一个可能的解决方案是:
type nonEmptyString = string & { __nonEmptyStr: never };
这样可以缓解需要显式转换为字符串的问题(以上三个测试都有效),但会污染类型,引入 __nonEmptyStr
(如果被引用,则为 undefined
)。
function fn<T extends string>(a: T extends '' ? never : T) {
// But TypeScript won't know here that !!a === true
}
fn(''); // Error
fn('foo'); // No error
type NonEmptyString = ....;
interface Props {
content: NonEmptyString;
}
- JaKXztype NonEmptyString<T> = T extends '' ? never : T
。 - Pyrolistical""
设置一个错误的返回类型,这样当你在其它地方使用时就会立即报错:type MyFnType = {
(a: "") => never;
(a: string) => whatever;
}
function fn: MyFnType = ...
function fn(s: ''): never; function fn(s: string): string; function fn(s: string | '') {/* 在这里执行真正的工作 */}
。 - Henry BlythNonNull
命名为Valuable
。 - abitwhy Weiconst foo: NonEmpty = ''
将导致 foo
的类型为 string
。 - craigpatik您可以使用!a
来检查a
是否为空字符串。
private checkRequired(text:string){
if(text == null) return false;
let n = text.length;
for (let i = 1; i < n; i++){
if (text[i] !== " "){
return true;
}
}
return false;
}
if(this.checkRequired("bla bla blast")){
... do your stuff
}
"strict": true,
下面:
"strictNullChecks": false,
这样就能解决你的问题了。
string
类型呢:const isNotBlank = (str?: string|null): str is string => (str !== undefined && str !== null && str.trim().length > 0)
? 真诚提问 - 这种方法有何问题?。 - Anoiny